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

How to use variables as arguments in a Test case using NUnit

我很好奇是否可以使用 NUnit 框架在 TestCase 中将局部变量作为 参数 传递。
这是一个例子:

public XDocument config = XDocument.Load(Constants.configFile);

[Test(config)]
public void TestMethod(XDocument xml)
{
    ...
}

有什么简单的解决方案可以让我完成这项工作吗?

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

但即使语法可行,NUnit 也做不到,因为...

  1. 构造class时初始化值
  2. 在您 运行 测试之前,class 不会构建。
  3. NUnit 在运行 测试之前需要测试用例参数。

[最后一点是允许 NUnit,当在 GUI 下使用时 运行ner 在您 运行 之前显示所有测试。]

最简单的方法是使 config 成为静态成员并直接在测试中使用它,而不是将其用作参数。我从你的评论中了解到这不适合你的情况。

在这种情况下,您可以使用间接层来解决问题。如果您从使用 TestCase 切换到 TestCaseSource,您可以使用静态方法作为源并让该方法执行您想要的任何代码,以便 return 值列表是用于测试用例。例如...

static public IEnumerable<XDocument> Config()
{
    yield return XDocument.Load(Constants.configFile);
}

[TestCaseSource(nameof(Config)]
public void TestMethod(XDocument xml)
{
    ...
}

来源是 returning IEnumerable<XDocument> 而不仅仅是 XDocument 因为 TestCaseSourceAttribute 实际上是为了 return 一些测试用例。我们在这里稍微滥用它。