我很好奇是否可以使用 NUnit 框架在 TestCase
中将局部变量作为参数传递。
这是一个例子:
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
实际上是为了返回一些测试用例。我们在这里稍微滥用了它。
关于c# - 如何使用 NUnit 在测试用例中使用变量作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66175524/