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

Testing 在NUnit[拆卸]中,如何确定测试是否单独运行?,testing,nunit,Testing,Nunit,因此,在中,我得到了和测试结果消息,但我想特别处理测试是单独运行(测试会话中的单个测试)还是在一整套测试中启动(例如,“运行所有测试/解决方案中的所有测试”) 目标是检测开发人员是单独启动测试(从VisualStudio中手动启动),还是使用持续集成系统启动测试 这就是我到目前为止所做的: /// <summary> /// A helper function for resolving problems when string comparison fails. /// &

因此,在中,我得到了和测试结果消息,但我想特别处理测试是单独运行(测试会话中的单个测试)还是在一整套测试中启动(例如,“运行所有测试/解决方案中的所有测试”)

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

这就是我到目前为止所做的:

/// <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
            //...  
        }
    }
}
//
///用于在字符串比较失败时解决问题的帮助函数。
/// 
/// 
///用于分析检测到的差异。
/// 
[撕裂]
public void compareNoMachingsTringSonFailure(){
if(TestContext.CurrentContext.Result.Output.Status==TestStatus.Failed){
字符串outputMessage=TestContext.CurrentContext.Result.Message;
if(outputMessage.StartsWith(“预期字符串为”)){
//进行扩展比较
//这应该只在单个运行上运行,这些运行是从VisualStudio手动启动的
//...  
}
}
}

如何在拆卸方法中获取有关测试运行/会话的信息?

您不能在拆卸代码中这样做,因为(1)拆卸仍然是测试的一部分,(2)测试不应该知道运行它们的人、运行它们的原因等。执行环境知道测试,但是测试不知道执行环境。事实上,要确保每个环境中的工作方式相同,NUnit会遇到很多麻烦。虽然有欺骗NUnit的方法,但它们通常都是坏主意和版本依赖

以下是你能做的事

  • 创建从设备继承的设备
  • 将所需逻辑放入新夹具拆卸方法中
  • 将新夹具标记为
    [Explicit]
  • 不要向新装置添加任何类别
  • 由于(3)的原因,当您运行所有测试时,新的fixture将不会作为CI的一部分运行,甚至不会从IDE运行

    它只能显式运行。由于它没有类别,这意味着它只能按名称运行。。。i、 e.通过选择整个夹具或单个试验


    这不是你所要求的。如果您运行整个fixture,您将获得所有继承测试方法的完整比较。然而,对于你想要实现的目标来说,这可能已经足够了。

    好主意。见鬼,我甚至尝试将[Explicit]属性添加到[TearDown]方法中作为测试。但这并不奏效:-/