如何使用 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 也做不到,因为...
- 构造class时初始化值
- 在您 运行 测试之前,class 不会构建。
- 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 一些测试用例。我们在这里稍微滥用它。
我很好奇是否可以使用 NUnit 框架在 TestCase
中将局部变量作为 参数 传递。
这是一个例子:
public XDocument config = XDocument.Load(Constants.configFile);
[Test(config)]
public void TestMethod(XDocument xml)
{
...
}
有什么简单的解决方案可以让我完成这项工作吗?
如您所见,您不能这样做,因为 C# 不允许您使用非常量对象的值作为属性的参数。
但即使语法可行,NUnit 也做不到,因为...
- 构造class时初始化值
- 在您 运行 测试之前,class 不会构建。
- 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 一些测试用例。我们在这里稍微滥用它。