尼特.将参数传递到拆解方法中

本文关键字:方法 参数传递 尼特 | 更新日期: 2023-09-27 18:32:01

我正在使用NUnit。 我有这样的定义我的测试方法:

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

测试用例完成后,它将进入拆卸方法。 想要做的是将那些 TestCase 参数传递到测试方法中,但也传递到 TearDown 方法中。

像这样:

[TearDown]
public void TearDown(string firstName, string lastName)
{
  ...
}

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

如果有人有任何想法......那就太好了!谢谢。基督教

尼特.将参数传递到拆解方法中

可以直接

TearDown函数中的TestContext引用测试的参数。

像这样的东西。

[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函数中引用这些对象

拆卸

和设置是为测试夹具中的每个测试执行的。假设您有以下测试:

[TestCase("Joe", "Smith")]
public void Test1(string firstName, string lastName) { ... }
[Test]
public void Test2() { ... }
[TestCase(10)]
public void Test3(int value) { ... }

拆解方法的预期签名是什么?

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

实际上,这是可能的。

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