testing - 在 NUnit [TearDown] 中,如何判断测试是否单独运行?
问题描述
因此,在TearDown中,我获得了有关测试结果和测试结果消息的信息,但我想专门处理有关测试是单独运行(测试会话中的单个测试)还是整体启动的事情一组测试(例如“从解决方案运行所有测试/所有测试”)。
目标是检测开发人员是单独启动测试(手动,从 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) TearDown 仍然是测试的一部分,并且 (2) 测试不应该知道有关谁运行它们、它们为什么运行等的任何信息。执行环境知道测试,但测试不知道执行环境。事实上,NUnit 费了很大的力气来确保每个环境中的工作都一样。虽然有一些方法可以欺骗 NUnit,但它们通常是坏主意并且依赖于版本。
这是你可以做的...
- 创建一个从您的夹具继承的夹具。
- 将您想要的逻辑放入新的夹具 TearDown 方法中。
- 将新夹具标记为
[Explicit]
。 - 不要将任何类别添加到新灯具中。
由于 (3),当您运行所有测试时,新夹具不会作为 CI 的一部分运行,甚至不会从 IDE 运行。
它只能显式运行。由于它没有类别,这意味着它只能按名称运行......即通过选择整个夹具或单个测试。
这不是你所要求的。如果您运行整个夹具,您将获得所有继承的测试方法的完整比较。但是,对于您要完成的工作,这可能就足够了。
推荐阅读
- laravel - 如何在 vue 中隐藏组件中的模态?
- react-native - 使用 redux 和 redux thunk 反应原生多动作
- kubernetes - 有没有办法用 prometheus 数据源在 Grafana 变量中获取 Kubernetes 的集群名称?
- r - 如何使第二个 selectInput 基于用户在 R Shiny 的第一个 selectinput 中选择的内容
- algorithm - 递归 func(int a, int n) 和 return a*func (a, n-1) 的时间复杂度是多少?
- react-native - 在 React Native 中添加一次欢迎屏幕
- .net-core - 使用 Blazor Webassembly 将 blazor 组件动态添加到 owlCarousel 的问题
- mysql - 如何在mysql中按子字符串尊重分隔符选择行
- python - 了解 OpenCV 矩阵操作
- google-chrome - Chrome WebRTC 回声消除和外部音频源