最后,块仅在调试模式下执行

时间:2012-11-22 14:43:37

标签: c# visual-studio-2010 try-catch

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

我创建了一个简单的单元测试:

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

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

3 个答案:

答案 0 :(得分:4)

您指定测试超时为 1000 ms,而您的方法为 2000 ms。这会导致测试框架过早地强制关闭您的测试方法,因此它不会离开Sleep调用,也没有时间到达finally块。调试可能会禁用超时属性。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

但我仍然认为最终会在vs2010中执行。如果您尝试显示一个消息框System.Windows.Forms.MessageBox.Show(“finally”),您应该可以看到它弹出。

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