将动态生成的值传递给NUnit自定义属性

时间:2017-11-17 16:15:13

标签: attributes nunit constants typeof custom-attribute

对于我们的测试场景 - 基于应用程序的配置,我们可能希望启用或禁用场景。为此,我创建了一个自定义IgnoreIfConfig属性,如下所示:

public class IgnoreIfConfigAttribute : Attribute, ITestAction
{
    public IgnoreIfConfigAttribute(string config)
    {
        _config = config;
    }
    public void BeforeTest(ITest test)
    {
        if (_config != "Enabled") NUnit.Framework.Assert.Ignore("Test is Ignored due to Access level");
    }
    public void AfterTest(ITest test)
    { 

    }
    public ActionTargets Targets { get; private set; }
    public string _config { get; set; }
}

可以使用如下:

    [Test, Order(2)]
    [IgnoreIfConfig("Enabled")] //Config.Enabled.ToString()
    public void TC002_DoTHisIfEnabledByConfig()
    {

    }

现在,此属性仅将常量字符串作为输入。如果我要用在运行时动态生成的东西替换它,例如来自Json文件的值 - 如何将其转换为常量。常量表达式,TypeOf表达式或数组创建属性参数类型的表达式?比如Config.Enabled?

2 个答案:

答案 0 :(得分:0)

你不能按照你的要求去做,但你可以用不同的方式看问题。只需为要检查的JSON文件中的某个属性的名称赋予属性,例如“配置”。

答案 1 :(得分:0)

根据查理的建议:我实现了这个 -

PropCol pc = new PropCol(); // Class where the framework reads Json Data.
public IgnoreIfConfigAttribute(string config)
{
    pc.ReadJson();
    if(config = "TestCase") _config = PropCol.TestCase;
    // Here TestCase is a Json element which is either enabled or disabled.
}