我正在使用CodeDom生成一个包含一些方法的类。我能够声明我的方法的属性看起来像Pex在创建参数化单元测试时所做的那样:
[PexMethod]
public void myMethod()
但是我想在其中加入更多内容:
[PexMethod (Max Branches = 1000)]
public void myMethod()
但我无法加入((Max Branches = 1000))
。你能帮我一点吗?
答案 0 :(得分:2)
属性值中不能包含空格,它们只是自定义属性类中公共属性的包装。例如:
public class TestAttribute : Attribute
{
public bool Enabled { get; set; }
}
你可以像这样使用
[TestAttribute(Enabled = true)]
void Foo(){}
因此,由于属性映射到属性,因此必须遵循常规的语法命名规则。
答案 1 :(得分:2)
我不确定您的问题是什么,但您可以在the Value
property上设置CodeAttributeArgument
:
var method =
new CodeMemberMethod
{
Name = "MyMethod",
CustomAttributes =
{
new CodeAttributeDeclaration
{
Name = "PexMethod",
Arguments =
{
new CodeAttributeArgument
{
Name = "MaxBranches",
Value = new CodePrimitiveExpression(1000)
}
}
}
}
};
答案 2 :(得分:0)
MaxBranches属性位于基类(PexSettingsAttributeBase)上。这可能就是你遇到麻烦的原因。您可能会反映错误的类型以找到要设置的PropertyInfo。
答案 3 :(得分:0)
CodeAttributeArgument codeAttr = new CodeAttributeArgument(new CodePrimitiveExpression("Max Branches = 1000"));
CodeAttributeDeclaration codeAttrDecl = new CodeAttributeDeclaration("PexMethod",codeAttr);
mymethod.CustomAttributes.Add(codeAttrDecl);