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();
...
}
答案 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适用于测试继承,因此您可以使用SetUp
和TearDown
方法创建基础测试类:
[TestFixture]
public class BaseTest
{
[SetUp]
public virtual void SetUpTest()
{
//...
}
[TearDown]
public virtual void TearDownTest()
{
//...
}
}
然后创建一个继承自基类的常规测试类,它将重用SetUp
和TearDown
实现:
[TestFixture]
public class RegularTest : BaseTest
{
[Test]
public virtual void MyTest()
{
//...
}
}