0

问题来自这里:SO - Timeout in c# tests

我创建了一个简单的单元测试,如下所示:

[Timeout(1000)][TestMethod]
public void TestMethod1()
{
    try
    {
        System.Threading.Thread.Sleep(2000);
    }
    finally
    {
        Console.WriteLine("Executed");
    }
}

当我运行测试时,finally 块没有被执行。但是当我调试它时,它确实如此。为什么会这样?

4

3 回答 3

4

您将测试超时指定为1000毫秒,而您的方法休眠2000毫秒。这会导致您的测试方法被测试框架过早地强制关闭,因此它不会离开Sleep调用并且没有时间到达finally阻塞。调试可能会禁用 timeout 属性。

于 2012-11-22T14:46:16.107 回答
1

Timeout 属性根本不适用于调试会话。

于 2012-11-22T14:53:58.833 回答
1

调试期间禁用超时,因此您可以看到 Console.WriteLine() 输出。

但我仍然认为 finally 是在 vs2010 中执行的。如果您尝试显示消息框 System.Windows.Forms.MessageBox.Show("finally") 您应该能够看到它弹出。

在 vs2010 中超时后,Console.WriteLine 输出丢失。

于 2012-11-22T14:59:21.770 回答