运行 只有在另一个通过时才进行 C# 单元测试

Run a C# unittest only if another one passes

我正在尝试 运行 C# 中的单元测试,但前提是另一个单元测试通过?无法完全正常工作,有人知道我该怎么做吗?

编辑:在 NUnit 中

您可以通过使用 [Order()] 属性来完成此操作,尽管它可能不是最干净的解决方案。 (docs)

这将允许您运行 依赖性测试作为 [Order(1)],依赖第一个测试的测试作为 [Order(2)]。您可以跨测试共享您的驱动程序,如果第一个测试失败,则关闭驱动程序,导致依赖第一个测试通过的其他测试失败。

我前阵子遇到过这个问题。我想出的解决方案可能不是最优雅的,但它确实有效。我为解决排序问题所做的是创建了自己的单元测试框架。这是我工作的公司的专利,所以我不能和你分享。

在测试框架中,存在

  • 每种类型测试的模板和聚合所有测试的通用模板
  • 执行每个模板类型的实用程序

例如,如果我正在进行集成测试,我会有一个 "http utility" 并且模板将包含端点和有效负载。

我想要 运行 的测试需要存储到中间数据结构中,例如 json。这使我能够将测试序列化到模板中。

现在这就是它变得棘手的地方...使用一些花哨的 T4 模板,我将获取 json 数据并将其序列化到模板列表中。然后我会按执行顺序和依赖性对测试进行排序(一个测试可能依赖于另一个测试以链接集成测试)。然后我会为每个模板生成一个单元测试。生成的单元测试将 运行 on build

对于你关于在失败时取消测试执行的问题,你可以使用一些奇特的逻辑将其构建到你的模板中

static List<ITestTemplate> requiredTests = new List<ITestTemplate>();
...
if(requiredTests.Any(t => t.Failed))
  Assert.IsTrue(false) //fail subsequent tests