0

我正在使用 CodeDom 生成一个包含一些方法的类。我能够为我的方法声明一个属性,使其看起来与 Pex 在创建参数化单元测试时所做的相似:

[PexMethod]
public void myMethod()

但是,我想在其中添加更多内容,例如:

[PexMethod (Max Branches = 1000)]
public void myMethod()

但我无法包含((Max Branches = 1000)). 你能帮我一点吗?

4

4 回答 4

2

属性值中不能有空格,它们只是自定义属性类中公共属性的包装。例如:

public class TestAttribute : Attribute
{
    public bool Enabled { get; set; }
}

你可以像这样使用它

[TestAttribute(Enabled = true)]
void Foo(){}

因此,由于属性映射到一个属性,它必须遵循正常的语法命名规则。

于 2012-04-30T21:13:10.860 回答
2

我不确定您的问题是什么,但您可以简单地将属性Value设置CodeAttributeArgument

var method =
    new CodeMemberMethod
    {
        Name = "MyMethod",
        CustomAttributes =
        {
            new CodeAttributeDeclaration
            {
                Name = "PexMethod",
                Arguments =
                {
                    new CodeAttributeArgument
                    {
                        Name = "MaxBranches",
                        Value = new CodePrimitiveExpression(1000)
                    }
                }
            }
        }
    };
于 2012-04-30T21:39:05.400 回答
0

MaxBranches属性位于基类 ( PexSettingsAttributeBase ) 上。这可能就是你遇到麻烦的原因。您可能正在反思错误的类型以找到要设置的 PropertyInfo。

于 2012-04-30T21:16:15.660 回答
0
    CodeAttributeArgument codeAttr = new CodeAttributeArgument(new CodePrimitiveExpression("Max Branches = 1000"));
     CodeAttributeDeclaration codeAttrDecl = new CodeAttributeDeclaration("PexMethod",codeAttr);

 mymethod.CustomAttributes.Add(codeAttrDecl);
于 2016-07-21T13:13:25.253 回答