因此,在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方法获取有关测试运行/会话的信息?
答案 0 :(得分:1)
您无法在拆卸代码中执行此操作,因为(1)TearDown仍然是测试的一部分,并且(2)测试不应该了解谁运行了它们,为什么运行它们等。执行环境知道测试,但是测试不知道执行环境。实际上,NUnit要确保每种环境下的工作相同会带来很多麻烦。尽管可以通过多种方法欺骗NUnit,但它们通常是错误的主意,并且取决于版本。
这是您可以可以做的...
[Explicit]
。由于(3),当您运行所有测试时,新设备将不作为CI的一部分甚至从IDE中运行。
只能明确运行。由于没有类别,因此只能按名称运行,即选择整个夹具或单个测试。
这不是您想要的相当。如果您运行整个灯具,则将获得所有继承的测试方法的完整比较。但是,这对于您要完成的任务可能就足够了。