有没有办法访问当前测试的参数(除了参数本身)?

时间:2013-05-03 13:22:11

标签: nunit parameterized-tests

如果我使用[TestCaseSource][ValueSource]之类的东西编写参数化NUnit测试,NUnit会将参数直接传递给我的测试方法。但是有没有其他方法来访问这些参数,例如来自SetUp,或来自辅助方法(无需将参数值显式传递给该辅助方法)?

例如,假设我有三种不同的情景(可能是“上升率”,“下降率”和“恒定利率”)。我正在为特定的计算编写测试,并且一些测试在所有三种情况下都会有相同的行为;三个中的两个中的其他人(我将为另一个场景编写第二个测试);其他人将针对每个场景进行单独测试。参数化测试似乎是对此进行建模的好方法;我可以为每个场景编写一个策略对象,并根据每个测试应该应用于哪些场景来参数化测试。

我可以这样做:

public IEnumerable<RateStrategy> AllScenarios {
    get {
        yield return new RisingRatesStrategy();
        yield return new FallingRatesStrategy();
        yield return new ConstantRatesStrategy();
    }
}
[TestCaseSource("AllScenarios")]
public void SomethingThatIsTheSameInAllScenarios(RateStrategy scenario) {
    InitializeScenario(scenario);
    ... arrange ...
    ... act ...
    ... assert ...
}

这样做的缺点是我需要记住在每次测试中都要调用InitializeScenario。这很容易搞砸,它也使得测试更难阅读 - 除了确切地说明这个测试适用于哪些场景的属性之外,我还需要额外的一行代码使我的测试变得混乱,说是哦是啊,有场景。

还有其他方法可以访问测试参数吗?是否存在静态属性,类似于TestContext上的属性,可以让我从我的SetUp方法访问测试参数,这样我就可以使我的测试更具说明性(基于约定)和重复性较低?

TestContext看起来很有前途,但它只告诉我测试的名称以及它是否通过。测试的参数是那里的,但只作为显示字符串的一部分,而不是作为实际对象;我无法获取策略对象并开始在其上调用方法。)

0 个答案:

没有答案