C# NUnit自定义属性同时充当TestAttribute和CategoryAttribute

C# NUnit自定义属性同时充当TestAttribute和CategoryAttribute,c#,testing,attributes,nunit,nunit-3.0,C#,Testing,Attributes,Nunit,Nunit 3.0,我想知道是否有可能创建自定义NUnit属性,该属性将作为CategoryAttribute,同时作为TestAttribute 我试图实现的是这样的目标: public class UnitTestAttribute : TestAttribute, CategoryAttribute, ITestAction { public UnitTestAttribute() : base("UnitTest") public void BeforeTest(ITest test)

我想知道是否有可能创建自定义NUnit属性,该属性将作为CategoryAttribute,同时作为TestAttribute

我试图实现的是这样的目标:

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;
}
不幸的是,这将不起作用,因为一个类不能有两个基类。 我试图实现的是尽量减少我必须编写的代码量,以便将一些测试标记为单元测试,同时能够根据它们的类别过滤测试。所以我现在的代码

[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也会找到类别等。

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

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

有关详细信息,请参阅CategoryAttribute和PropertyAttribute的代码。PropertyAttribute实际上完成了大部分工作。对PropertyNames.cs中的类别使用常量值