我正在使用NUnit。我的测试方法定义为:
[Test]
[TestCase("Fred", "Bloggs")]
[TestCase("Joe", "Smith")]
public void MyUnitTest(string firstName, string lastName)
{
...
}
TestCase完成后,进入TearDown方法。想要做的是将那些TestCase参数传递给测试方法,但也传递给TearDown方法。
这样的事情:
[TearDown]
public void TearDown(string firstName, string lastName)
{
...
}
我希望NUnit支持这种开箱即用的功能。否则,我需要在测试方法中编写定制代码,以将测试数据存储在集合中。然后在TearDown方法中使用该集合。
如果有人有任何想法......会很棒! 谢谢。 基督教
答案 0 :(得分:9)
为测试夹具中的每个测试执行TearDown和SetUp。考虑一下你有以下测试:
[TestCase("Joe", "Smith")]
public void Test1(string firstName, string lastName) { ... }
[Test]
public void Test2() { ... }
[TestCase(10)]
public void Test3(int value) { ... }
TearDown方法的预期签名是什么?
所以,答案是否定的。 NUnit不提供将测试参数传递给TearDown方法的默认方式。我认为不会。您需要手动添加此功能。
答案 1 :(得分:5)
可以直接从TestContext
函数中的TearDown
将参数引用到测试中。
像这样。
[Test]
[TestCase("Fred", "Bloggs")]
[TestCase("Joe", "Smith")]
public void MyUnitTest(string firstName, string lastName)
{
}
[TearDown]
public void TearDown()
{
string firstName = TestContext.CurrentContext.Test.Arguments[0] as string;
string lastName = TestContext.CurrentContext.Test.Arguments[1] as string;
}
应该注意的是TestContext.CurrentContext.Test.Arguments
只是一个对象数组,无论个别签名如何,都会为TestFixture
中的每个测试调用,所以我们应该小心确保我们处理所有可能的问题Arguments[]
中的值,但 肯定 可以在TearDown
函数中引用这些对象
答案 2 :(得分:4)
实际上,这是可能的。
如果您在TearDown中引用TestContext.CurrentContext.Test.Name
,则可以获得包含传递给它的参数的完整方法签名。你将不得不解析它,但它就在那里。