gpt4 book ai didi

unit-testing - xunit 以编程方式添加新测试/"[Facts]"?

转载 作者:行者123 更新时间:2023-12-04 05:17:03 24 4
gpt4 key购买 nike

我们有一个文件夹,里面装满了需要设置为单个 URI 的 JSON 文本文件。目前这一切都是用一个 xUnit "[Fact]"完成的,如下所示

[Fact]
public void TestAllCases()
{
PileOfTests pot = new PileOfTests();
pot.RunAll();
}

pot.RunAll() 然后解析文件夹,加载 JSON 文件(比如 50 个文件)。然后每个都针对 URI 进行锤击,以查看每个都返回 HTTP 200(“ok”)。如果有任何失败,我们目前正在通过使用将其打印为失败
System.Console.WriteLine("\n >> FAILED ! << " + testname + "\n");

这确实确保了失败引起了我们的注意,但 xUnit 认为所有测试都失败了(可以理解)。最重要的是,我们不能指定 xunit “在这里,只运行这个特定的测试”。它目前的构建方式要么全有要么全无。

如何以编程方式添加测试用例?当我阅读 *.json 文件的数量和名称时,我想添加它们。

最佳答案

简单的答案是:
没有 ,不是直接的。但是存在一种解决方法,尽管有点笨拙,如下所示。

当前情况(从 xUnit 1.9.1 开始)

通过在类上指定 [RunWith(typeof(CustomRunner))],可以指示 xUnit 使用 CustomRunner 类(它必须实现 Xunit.Sdk.ITestClassCommand)来枚举用该属性修饰的测试类上可用的测试。

但不幸的是,虽然测试方法的调用已经从 System.Reflection + 实际方法中解耦了,
通过测试运行到测试运行器的方式还没有。

在用于调用特定测试方法的 xUnit 框架代码中,有一个对 typeof(YourTestClass).GetMethod(testName) 的调用。

这意味着,如果实现测试发现的类返回的测试名称不引用测试类上的真实方法,则测试将显示在 xUnit GUI 中 - 但任何运行/调用它的尝试都以 TargetInvocationException 结束.

解决方法

如果考虑一下,解决方法本身相对简单。
可以在 here 找到它的工作实现。

所提供的解决方案首先读入文件的名称,这些文件应该在 xUnit GUI 中显示为不同的测试。
然后它使用 System.Reflection.Emit 动态生成带有测试类的程序集,其中包含针对每个输入文件的专用测试方法。

每个生成的方法所做的唯一一件事就是调用指定 RunTest(string fileName) 属性的类上的 [EnumerateFilesFixture(...)] 方法。有关进一步说明,请参阅链接的要点。

希望这可以帮助;如果您愿意,可以随意使用示例实现。

关于unit-testing - xunit 以编程方式添加新测试/"[Facts]"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13062975/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com