TestFixtureSetup 和 TestFixtureTearDown 不对每个 TestCase 运行

TestFixtureSetup and TestFixtureTearDown do not run for each TestCase

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

带有 [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] is used inside a TestFixture to provide a single set of functions that are performed once after all tests are completed.

如果你想为每个测试 运行 做些什么,我建议创建一个 class 来实现 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
    }
}