仅在另一个通过C#单元测试时运行

时间:2018-11-26 10:33:23

标签: c# unit-testing nunit

我正在尝试在C#中运行UnitTest,但是仅当另一个UnitTest通过时才可以?不能完全正常工作,有人知道我该怎么做吗?

编辑:在NUnit中

2 个答案:

答案 0 :(得分:0)

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

这将使您可以将依存关系测试作为[Order(1)]运行,并将依赖于第一个测试的测试作为[Order(2)]运行。您可以在所有测试中共享驱动程序,如果第一个测试失败,请关闭驱动程序,从而导致依赖于第一个测试通过的其他测试失败。

答案 1 :(得分:0)

我前一段时间遇到了这个问题。我想出的解决方案可能不是最优雅的,但它可以工作。为了解决订购问题,我创建了自己的单元测试框架。这是我工作的公司的礼貌,所以我无法与您分享。

在测试框架中,存在

  • 每种测试的模板和用于汇总所有测试的通用模板
  • 执行每种模板类型的实用程序

例如,如果我正在进行集成测试,我将拥有一个“ http实用程序”,并且模板将包含端点和有效负载。

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

现在这是棘手的地方...使用一些精美的T4模板,我将获取json数据并将其序列化为模板列表。然后,我将按照执行顺序和相关性对测试进行排序(对于一个链接集成测试,一个测试可能依赖于另一个测试)。然后,我将为每个模板生成一个单元测试。然后,生成的单元测试将在构建上运行

对于在测试失败的情况下取消测试执行的问题,您可以使用一些奇特的逻辑将其内置到模板中

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