我很好奇是否有可能传递局部变量作为参数在TestCase
中使用NUnit框架。
下面是一个例子:
public XDocument config = XDocument.Load(Constants.configFile);
[Test(config)]
public void TestMethod(XDocument xml)
{
...
}
有什么简单的方法可以让我做这件事吗?
正如您所发现的,您不能这样做,因为c#不允许您使用非常量对象的值作为属性的参数。
但是即使语法是可能的,NUnit也做不到,因为…
- 在构造类时初始化该值
- 类直到运行才被构造测试。
- NUnit在之前需要测试用例参数你运行测试
[最后一点是允许NUnit在GUI运行器下使用时在运行它们之前显示所有测试的原因]
最简单的方法是使config
成为静态成员,并直接在测试中使用它,而不是作为参数。从你的评论中我明白这对你的情况不起作用。
在这种情况下,你可以用间接层来解决问题。如果您从使用TestCase
切换到使用TestCaseSource
,您可以使用静态方法作为源,并让该方法执行您想要的任何代码,以便返回用于测试用例的值列表。例如…
static public IEnumerable<XDocument> Config()
{
yield return XDocument.Load(Constants.configFile);
}
[TestCaseSource(nameof(Config)]
public void TestMethod(XDocument xml)
{
...
}
源返回IEnumerable<XDocument>
而不仅仅是XDocument
,因为TestCaseSourceAttribute
实际上打算返回一些测试用例。这里我们有点滥用了。