Nunit没有为每个文本夹具调用一次设置

时间:2018-01-09 15:23:40

标签: c# automated-tests nunit

我是Nunit的新手,我正在尝试运行2个测试夹具, A&乙。在每个夹具中,我为每个夹具都有一个独特的安装方法。但是,当我在Visual Studio中的“测试资源管理器”中单击“全部运行”时,将调用Fixture A的测试设置(首先执行),并忽略Fixture B的设置。通过命令行运行所有测试时,我也会得到相同的行为。以下是我的代码:

夹具A

[TestFixture]
public class A
{      
        [SetUp]
        public void SetupTest()
        {
            // ...Setup for Fixture A
        }                

        [Test, Order(1)]
        public void TestForFixtureA()
        {
            // ...perform test
        }
}

夹具B

[TestFixture]
public class B
{      
        [SetUp]
        public void SetupTest()
        {
            // ...Setup for Fixture B
        }                

        [Test]
        public void TestForFixtureB()
        {
            // ...perform test
        }
}

使用Fixture执行Setup方法的正确方法是什么?

2 个答案:

答案 0 :(得分:5)

您在测试夹具级别使用不正确的属性进行设置。您应该使用的属性是[SetUpFixture]。有关这方面的信息可以在the nunit documentation

中找到

以下是从the documentation获取的所有设置属性及其用法的列表:

  • SetUpAttribute 现在专门用于每次测试设置。

  • TearDownAttribute 现在专门用于每次测试拆解。

  • OneTimeSetUpAttribute 用于每次测试运行的一次性设置。如果你 运行n次测试,此事件只会发生一次。

  • OneTimeTearDownAttribute 用于每次测试运行的一次性拆解。 如果您运行n次测试,则此事件仅发生一次

  • SetUpFixtureAttribute 继续像以前一样使用,但是 改变了方法属性。

这似乎并不能解释您所看到的bizzare行为,因为设置应该按测试运行,但使用正确的属性不会受到伤害。

答案 1 :(得分:3)

如果您打算在每个灯具上运行一次设置,请使用[OneTimeSetUp]。但是如果你打算在每个测试中运行一次,那么[SetUp]是正确的。我们无法从代码中知道您的意图。

无论您使用哪一个,设置都应该全部运行。 [OneTimeSetUp]将运行但[SetUp]不会运行的唯一情况是在夹具内没有找到单独的测试时。是否所有测试都被认可?

我建议你非常清楚地确认设置没有运行。最简单的方法是从setup方法暂时创建一些输出。