TestFixtureSetup和TestFixtureTearDown不会为每个TestCase运行

本文关键字:TestCase 运行 TestFixtureTearDown TestFixtureSetup | 更新日期: 2023-09-27 18:17:27

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

TestFixtureSetup和TestFixtureTearDown不会为每个TestCase运行

带有[TestFixtureSetUp][TestFixtureTearDown]装饰的方法在所有测试中只运行一次。使用[SetUp][TearDown]修饰的方法在每个测试用例之前和之后运行,因此您希望使用它们。

下面是一个示例执行顺序,包括构造函数和Dispose方法。方法名与修饰它们的属性相对应: NUnitTestClass..ctor NUnitTestClass.TestFixtureSetUp NUnitTestClass.SetUp NUnitTestClass.TestMethod1 NUnitTestClass.TearDown NUnitTestClass.SetUp NUnitTestClass.TestMethod2 NUnitTestClass.TearDown NUnitTestClass.TestFixtureTearDown NUnitTestClass.Dispose

你所描述的是预期的行为。根据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
    }
}