NUnit相当于JUnit的规则

时间:2016-01-26 18:55:49

标签: junit nunit

C#中是否有相当于JUnit的规则?我的意思是避免在几个不同的测试中重复相同的[SetUp][TearDown]行。而不是:

[SetUp]
public void SetUp()
{
    myServer.connect();
}

[TearDown]
public void TearDown()
{
    myServer.disconnect();
}

...将逻辑放在一个可以在几个测试中声明为字段的规则中:

public MyRule extends ExternalResource {
  @Override
  protected void before() throws Throwable
  {
    myServer.connect();
  };

  @Override
  protected void after()
  {
    myServer.disconnect();
  };
};

然后

class TestClass
{
    @Rule MyRule = new MyRule();
    ...
}

2 个答案:

答案 0 :(得分:3)

您可以实现自己的TestActionAttribute类来运行您的测试前和测试后代码。如果您打算在每次测试之前和之后执行相同的操作,则可以在类声明中定义自定义属性。

e.g:

[MyRule] // your custom attribute - applied to all tests
public class ClassTest
{
    [Test]
    public void MyTest()
    {
        // ...
    }
}

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class MyRuleAttribute : TestActionAttribute
{
    public override void BeforeTest(TestDetails testDetails)
    {
        // connect
    }

    public override void AfterTest(TestDetails testDetails)
    {
        // disconnect
    }
}

答案 1 :(得分:1)

NUnit适用于测试继承,因此您可以使用SetUpTearDown方法创建基础测试类:

[TestFixture]
public class BaseTest
{
    [SetUp]
    public virtual void SetUpTest()
    {
        //...
    }

    [TearDown]
    public virtual void TearDownTest()
    {
        //...
    }
}

然后创建一个继承自基类的常规测试类,它将重用SetUpTearDown实现:

[TestFixture]
public class RegularTest : BaseTest
{
    [Test]
    public virtual void MyTest()
    {
        //...
    }
}