j4n*_*4nw 2 c# nunit nunit-3.0
最初是在使用TestCaseSource和自定义派生property属性时遇到的。这是一个精炼的例子:
[TestFixture]
public class SomeTestFixture
{
[Test, Property("SomeProperty", "foo")]
public void RegularTest()
{
}
[Test, Property("SomeProperty", "foo"), TestCase(0)]
public void ParametrizedTest(int x)
{
}
[TearDown]
public void TearDown()
{
var properties = TestContext.CurrentContext.Test.Properties;
}
}
Run Code Online (Sandbox Code Playgroud)
properties在 RegularTest 后拆除时将有 "SomeProperty": "foo",但在 ParametrizedTest 后它们将是空的。为什么会出现这种情况?除了使用反射之外,我还能如何解决这个问题?
NUnit 的一个功能是,参数化测试上设置的属性适用于包含各个测试用例的套件。因此,您不应该以这种方式应用属性,除非您希望它们成为套件的属性,而不是测试用例的属性。
当然,这可能是一个设计缺陷。至少,它会让用户感到困惑。
如果您指定测试用例,则TestCaseAttribute无法添加新属性,尽管您可以指定一些众所周知的属性(例如描述)。解决方法是使用TestCaseSourceAttribute来指定案例并TestCaseData为每个案例提供单独的实例。该类TestCaseData确实允许您为每种情况设置属性。
诚然,这不是很方便,但它是一种解决方法。