在NUnit [TearDown]中,如何确定测试是否单独运行?

时间:2019-03-29 07:21:29

标签: testing nunit

因此,在TearDown中,我得到了info about the test outcome和测试结果消息,但是我想专门处理是否单独运行测试(测试会话中的单个测试) )或已在整套测试中启动(例如“运行所有测试/来自解决方案的所有测试”)。

目标是检测开发人员是单独启动测试(手动,从Visual Studio中启动)还是使用持续集成系统启动了测试。

这是我到目前为止所拥有的:

/// <summary>
///     A helper function for resolving problems when string comparison fails.
/// </summary>
/// <remarks>
///     Intended to be used to analyze the detected differences.
/// </remarks>
[TearDown]
public void CompareNonMatchingStringsOnFailure() {
    if (TestContext.CurrentContext.Result.Outcome.Status == TestStatus.Failed) {
        string outputMessage = TestContext.CurrentContext.Result.Message;
        if (outputMessage.StartsWith("Expected string to be ")) {

            // do extended comparison
            // This should only run on single runs, which were initiated manually from visual studio
            //...  
        }
    }
}

如何使用TearDown方法获取有关测试运行/会话的信息?

1 个答案:

答案 0 :(得分:1)

您无法在拆卸代码中执行此操作,因为(1)TearDown仍然是测试的一部分,并且(2)测试不应该了解谁运行了它们,为什么运行它们等。执行环境知道测试,但是测试不知道执行环境。实际上,NUnit要确保每种环境下的工作相同会带来很多麻烦。尽管可以通过多种方法欺骗NUnit,但它们通常是错误的主意,并且取决于版本。

这是您可以可以做的...

  1. 创建一个从您的灯具继承的灯具。
  2. 将所需的逻辑放入新的夹具TearDown方法中。
  3. 将新灯具标记为[Explicit]
  4. 不要向新灯具添加任何类别。

由于(3),当您运行所有测试时,新设备将作为CI的一部分甚至从IDE中运行。

只能明确运行。由于没有类别,因此只能按名称运行,即选择整个夹具或单个测试。

这不是您想要的相当。如果您运行整个灯具,则将获得所有继承的测试方法的完整比较。但是,这对于您要完成的任务可能就足够了。