TestFixtureSetup和TestFixtureTearDown不会为每个TestCase运行

时间:2015-10-13 19:05:50

标签: c# testing nunit

我在一个TestFixture中有几个TestCase。我还有一个TestFixtureSetup方法(Setup())和TestFixtureTearDown方法(TearDown())。但是,在运行所有测试时,SetUp()和TearDown()只运行一次,而不是每次执行TestCase。这是预期的行为吗?如果是,是否有办法在每次运行TestCase时运行方法?

2 个答案:

答案 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
    }
}