运行 只有在另一个通过时才进行 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
我正在尝试 运行 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