我在一个TestFixture中有几个TestCase。我还有一个TestFixtureSetup方法(Setup())和TestFixtureTearDown方法(TearDown())。但是,在运行所有测试时,SetUp()和TearDown()只运行一次,而不是每次执行TestCase。这是预期的行为吗?如果是,是否有办法在每次运行TestCase时运行方法?
答案 0 :(得分:5)
用[TestFixtureTearDown]
和[SetUp]
装饰的方法对所有测试都运行一次。
使用[TearDown]
和Dispose
装饰的方法在每个测试用例之前和之后运行,因此您希望使用这些方法。
以下是执行的示例顺序,包括构造函数和
NUnitTestClass..ctor
NUnitTestClass.TestFixtureSetUp
NUnitTestClass.SetUp
NUnitTestClass.TestMethod1
NUnitTestClass.TearDown
NUnitTestClass.SetUp
NUnitTestClass.TestMethod2
NUnitTestClass.TearDown
NUnitTestClass.TestFixtureTearDown
NUnitTestClass.Dispose
方法。方法名称与装饰它们的属性相对应:
NSString* catId = [catData[@"id"] stringValue
答案 1 :(得分:1)
您所描述的是预期的行为。根据Nunit文档:
[TestFixtureTearDownAttribute]在TestFixture中用于提供一组函数,这些函数在所有测试完成后执行一次。
如果你想为每个测试运行一些东西,我建议创建一个实现IDisposable的类。假设它被称为TestSpan或其他东西。然后你可以这样做:
[TestFixture]
public class Tests()
{
[TestCase]
public void MyTest()
{
var span = new TestSpan()
using(span)
{
// Do test stuff
}
}
}
public class TestSpan: IDisposable
{
TestSpan()
{
// Do Test Setup Stuff
}
Dispose()
{
// Do Test Cleanup Stuff
}
}