10

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

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

4

3 回答 3

10

可以直接从函数TestContext中的 Test 引用参数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功能

于 2017-12-21T20:10:59.380 回答
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 方法的默认方式。而且我认为不会。您需要手动添加此功能。

于 2012-04-24T11:54:12.897 回答
5

实际上,这是可能的。

如果您TestContext.CurrentContext.Test.Name在 TearDown 中引用,您可以获得包含传递给它的参数的完整方法签名。你将不得不解析它,但它就在那里。

于 2015-03-18T23:18:00.547 回答