如何使用NUnit在测试用例中使用变量作为参数



我很好奇是否有可能传递局部变量作为参数TestCase中使用NUnit框架。
下面是一个例子:

public XDocument config = XDocument.Load(Constants.configFile);
[Test(config)]
public void TestMethod(XDocument xml)
{
...
}

有什么简单的方法可以让我做这件事吗?

正如您所发现的,您不能这样做,因为c#不允许您使用非常量对象的值作为属性的参数。

但是即使语法是可能的,NUnit也做不到,因为…

  1. 在构造类时初始化该值
  2. 类直到运行才被构造测试。
  3. 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实际上打算返回一些测试用例。这里我们有点滥用了。

相关内容

  • 没有找到相关文章

最新更新