我是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方法的正确方法是什么?
答案 0 :(得分:5)
您在测试夹具级别使用不正确的属性进行设置。您应该使用的属性是[SetUpFixture]
。有关这方面的信息可以在the nunit documentation
以下是从the documentation获取的所有设置属性及其用法的列表:
SetUpAttribute 现在专门用于每次测试设置。
TearDownAttribute 现在专门用于每次测试拆解。
OneTimeSetUpAttribute 用于每次测试运行的一次性设置。如果你 运行n次测试,此事件只会发生一次。
OneTimeTearDownAttribute 用于每次测试运行的一次性拆解。 如果您运行n次测试,则此事件仅发生一次
SetUpFixtureAttribute 继续像以前一样使用,但是 改变了方法属性。
这似乎并不能解释您所看到的bizzare行为,因为设置应该按测试运行,但使用正确的属性不会受到伤害。
答案 1 :(得分:3)
如果您打算在每个灯具上运行一次设置,请使用[OneTimeSetUp]
。但是如果你打算在每个测试中运行一次,那么[SetUp]
是正确的。我们无法从代码中知道您的意图。
无论您使用哪一个,设置都应该全部运行。 [OneTimeSetUp]
将运行但[SetUp]
不会运行的唯一情况是在夹具内没有找到单独的测试时。是否所有测试都被认可?
我建议你非常清楚地确认设置没有运行。最简单的方法是从setup方法暂时创建一些输出。