NUnit自定义属性同时表现为TestAttribute和CategoryAttribute

时间:2017-09-11 07:48:27

标签: c# testing attributes nunit nunit-3.0

我想知道是否可以创建自定义NUnit属性,该属性将作为CategoryAttribute并与TestAttribute同时运行。

NUnit documentation - Test Attribute NUnit documentation - Category Attribute

我想要实现的是这样的:

public class UnitTestAttribute : TestAttribute, CategoryAttribute, ITestAction
{
    public UnitTestAttribute() : base("UnitTest")
    public void BeforeTest(ITest test) { /*some logic*/ }
    public void AfterTest(ITest test) { /*some logic*/ }
    public ActionTargets Targets => ActionTargets.Test;
}

不幸的是,这不起作用,因为单个类不能有2个基类。 我想要实现的几乎是最小化我必须编写的代码量,以便将某些测试标记为(在这种情况下)单元测试,同时能够根据其类别过滤测试。所以我目前的代码

[Test, UnitTest]
public void SomeTest() { /*doing some stuff*/ }

将更改为

[UnitTest]
public void SomeTest() { /*doing some stuff*/ }

我仍然可以使用以下命令运行测试

  nunit3-console mytest.dll --where "cat == UnitTest"

并且VS Test explorer也会找到类别等。

1 个答案:

答案 0 :(得分:1)

由于CategoryAttribute除了在测试中设置属性之外什么都不做,我建议你继承TestAttribute并自己实现类别行为。

您必须实现IApplyToTest接口。在对IApplyToTest的调用中,您应该将测试的category属性添加(不设置)到您想要的值。这很重要,因为理论上你的测试可以有额外的类别注释。

有关详细信息,请参阅CategoryAttributePropertyAttribute的代码。 PropertyAttribute实际上完成了大部分工作。使用您在PropertyNames.cs

中找到的类别的常量值