NUnit 测试属性在参数化测试中不可访问
NUnit test properties not accessible in parametrized tests
最初在使用 TestCaseSource
和自定义派生的 属性 属性时遇到。这是一个精炼的例子:
[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;
}
}
properties
在 RegularTest 后拆卸时将有 "SomeProperty": "foo",但在 ParametrizedTest 后它们将是空的。为什么会这样?除了使用反射之外,我该如何解决?
NUnit 的一项功能是,参数化 测试上设置的属性适用于包含各个测试用例的套件。因此,您不应该以这种方式应用属性,除非您希望它们成为套件的属性,而不是测试用例。
当然,这可能是设计缺陷。至少,它会让用户感到困惑。
如果您使用 TestCaseAttribute
指定测试用例,则无法添加新的 属性,但您可以指定一些众所周知的属性,例如描述。解决方法是使用 TestCaseSourceAttribute
来指定案例并为每个案例提供单独的 TestCaseData
实例。 TestCaseData
class 确实允许您在每种情况下设置 属性。
诚然,这不是很方便,但它是一种解决方法。
最初在使用 TestCaseSource
和自定义派生的 属性 属性时遇到。这是一个精炼的例子:
[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;
}
}
properties
在 RegularTest 后拆卸时将有 "SomeProperty": "foo",但在 ParametrizedTest 后它们将是空的。为什么会这样?除了使用反射之外,我该如何解决?
NUnit 的一项功能是,参数化 测试上设置的属性适用于包含各个测试用例的套件。因此,您不应该以这种方式应用属性,除非您希望它们成为套件的属性,而不是测试用例。
当然,这可能是设计缺陷。至少,它会让用户感到困惑。
如果您使用 TestCaseAttribute
指定测试用例,则无法添加新的 属性,但您可以指定一些众所周知的属性,例如描述。解决方法是使用 TestCaseSourceAttribute
来指定案例并为每个案例提供单独的 TestCaseData
实例。 TestCaseData
class 确实允许您在每种情况下设置 属性。
诚然,这不是很方便,但它是一种解决方法。