我正在使用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方法中使用该集合。
如果有人有任何想法..会很棒!谢谢。基督教
为测试夹具中的每个测试执行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方法的默认方式。我认为不会。您需要手动添加此功能。
可以直接从TestContext
函数中的TearDown
将参数引用到Test中。
像这样的东西。
[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
函数中的对象
实际上,这是可能的。
如果在TearDown中引用TestContext.CurrentContext.Test.Name
,则可以获得包含传递给它的参数的完整方法签名。你将不得不解析它,但它就在那里。