7

我有一种情况,我正在使用单元测试来执行执行测试的外部工具。我可以从工具的退出代码中确定测试是否通过、失败或超时。

有什么方法可以使单元测试失败,它将测试结果设置为超时而不是失败?

我尝试抛出 TimeoutException,但这与使用 Assert 的结果相同。

编辑: 我们将单元测试与 TFS 中的测试用例联系起来。在 Microsoft 测试中心中,测试运行中的测试可以有多种状态。其中之一是超时状态。我试图让我的测试失败,以便它正确地显示在这种状态下,并且不会与失败的测试用例混在一起。

4

4 回答 4

17

您可以使用在 Test 属性中添加 Timeout(millisecond) 来设置每个测试的超时限制...

[TestMethod, Timeout(2000)]

如果执行时间超过 2 秒,测试将失败。

谢谢马尔科

于 2013-11-06T18:59:33.577 回答
2

它不是真正的“以编程方式”,但您可以:

如果它识别出外部工具返回超时退出代码(这将是“程序化”部分),则您的测试应该等待。

所以测试框架会为你设置测试结果为“超时”。

我想,尤其是如果您的测试是自动化的,那将是一个合适的解决方案。

于 2012-10-01T11:05:20.047 回答
1

在单元测试中,您使用 2 种颜色进行处理:绿色和红色。没有超时颜色。

所以我想如果你的外部工具超时,你可以手动失败测试:

Assert.Fail("External tool used to do this test timed out");

检测您的外部工具是否超时的方式当然取决于您使用的外部工具以及您从单元测试中调用它的方式。

于 2012-09-20T12:28:24.120 回答
0

Your approach throwing a TimeoutException seems to be a good choice. However the TimeoutException doesn't derive from UnitTestAssertException.

You may want to do one of the following things:

  1. Throw an AssertFailedException indicating the reason as string.

  2. Sub-class the UnitTestAssertException with a custom UnitTestTimeOutException and throw that.

  3. Use Assert.Fail as @Darin-Dimitrov suggested.

于 2012-09-20T12:32:39.287 回答