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

问题描述 投票:9回答:3

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

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

c# unit-testing nunit nunit-2.5 teardown
3个回答
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方法的默认方式。我认为不会。您需要手动添加此功能。


5
投票

可以直接从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函数中的对象


4
投票

实际上,这是可能的。

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

© www.soinside.com 2019 - 2024. All rights reserved.