NUnit的。将参数传递给拆解方法

时间:2012-04-24 09:17:10

标签: c# unit-testing nunit nunit-2.5 teardown

我正在使用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方法中使用该集合。

如果有人有任何想法......会很棒! 谢谢。 基督教

3 个答案:

答案 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,则可以获得包含传递给它的参数的完整方法签名。你将不得不解析它,但它就在那里。