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

标签 c# nunit testcase

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

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

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

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

最佳答案

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

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

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

[最后一点是允许 NUnit 在 GUI 运行器下使用时在运行测试之前显示所有测试的原因。]

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

在这种情况下,您可以通过间接层来解决问题。如果您不再使用 TestCaseTestCaseSource ,您可以使用静态方法作为源,并让该方法执行您想要的任何代码,以便返回用于测试用例的值列表。例如...

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/

相关文章:

c# - 这个 "singleton"在 ASP.NET 应用程序中应该是线程安全的吗?

c# - 如何在 GSMComm 库中连接长短信?

C# 通过 httpwebrequest 保持 session ID

java - Selenium:动态按钮和类?

testing - Doxygen 测试计划生成

c# - WCF Soap 客户端无法解析签名中的 URI 以计算摘要

c# - 模拟具有不同签名的方法,其中一个方法具有 Object 作为参数类型

msbuild - 筛选 NUnit MSBuild 任务的类别?

c# - 将控制台输出添加到 NUnit 测试结果

appium - 尝试使用 Appium Server 针对 Windows 应用程序运行机器人框架测试用例 - 可能吗?