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

Chr*_*rke 9 c# nunit unit-testing nunit-2.5 teardown

我正在使用NUnit.我的测试方法定义为:

[Test]
[TestCase("Fred", "Bloggs")]
[TestCase("Joe", "Smith")]
public void MyUnitTest(string firstName, string lastName)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

TestCase完成后,它进入TearDown方法.想要做的是将那些TestCase参数传递给测试方法,但也传递给TearDown方法.

像这样的东西:

[TearDown]
public void TearDown(string firstName, string lastName)
{
  ...
}
Run Code Online (Sandbox Code Playgroud)

我希望NUnit支持这种开箱即用的功能.否则,我需要在测试方法中编写定制代码,以将测试数据存储在集合中.然后在TearDown方法中使用该集合.

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

Ser*_*kiy 9

为测试夹具中的每个测试执行TearDown和SetUp.考虑您有以下测试:

[TestCase("Joe", "Smith")]
public void Test1(string firstName, string lastName) { ... }

[Test]
public void Test2() { ... }

[TestCase(10)]
public void Test3(int value) { ... }
Run Code Online (Sandbox Code Playgroud)

TearDown方法的预期签名是什么?

所以,答案是否定的.NUnit不提供将测试参数传递给TearDown方法的默认方式.我认为不会.您需要手动添加此功能.


Atl*_*der 5

实际上,这是可能的。

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


Ste*_*t_R 5

可以直接从函数中将参数引用到Test TestContextTearDown.

像这样的东西.

[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;
}
Run Code Online (Sandbox Code Playgroud)

应当指出的是,TestContext.CurrentContext.Test.Arguments仅仅是一个对象数组,并会被要求在每个测试TestFixture,无论个人签名的,所以我们应该要小心,以确保我们应对所有可能的值,Arguments[]但可以肯定的能够引用的这些对象TearDown功能

  • +1。**注意:** _如果有人要使用答案方法,则应检查NUnit的版本_-自[v3.7]起,就可以使用`Arguments`数组(https://github.com/nunit/nunit/拉/ 2096), (2认同)