TestMethod Visual Studio 2010上的ExpectedException

时间:2010-04-13 11:07:18

标签: unit-testing visual-studio-2010 c#-4.0

今天我使用VS2008到VS2010的所有底层项目升级了我的解决方案。除了我的单元测试外,一切都很顺利。

首先,只有Web项目具有.NET 4的目标框架。所有其他项目仍然具有.NET 3.5。我将它们全部更改为.NET 4。

现在,当我调试单元测试时,它会在每个异常中中断。在2008年它只是不会通过并告诉我发生了异常。即使我定义了ExpectedException属性,它也会停止对每个异常进行调试。

我的一个测试的例子:

[TestMethod]
[ExpectedException(typeof(EntityDoesNotExistException))]
public void ConstructorTest()
{
    AddressType type = new AddressType(int.MaxValue);
}

EntityDoesNotExistException是一个自定义异常并继承了Exception。

修改 我在2008年和2010年查看了例外设置(ctrl + alt + e)。在两个版本中,设置都是相同的。但是在2008年,当我有ExpectedException属性时,调试不会中断。在2010年,它确实会破裂。

8 个答案:

答案 0 :(得分:12)

格里指出我正确的方向:

  • 按Ctrl-Alt-E
  • 打开公共语言运行时例外节点
  • 点击添加
  • 键入Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException
  • 确保未选中这两个复选框。

这将消除失败的Asserts的中断,但是当你设置了ExpectedException时,测试仍然会中断。

我是为此设置100奖金的人,所以一些赞成票会受到赞赏; - )

答案 1 :(得分:8)

答案 2 :(得分:2)

按Ctrl + Alt + E并检查CLR例外的中断设置。如果将其设置为true,则会出现您描述的行为。

答案 3 :(得分:2)

Microsoft支持人员告诉我在运行单元测试时使用Ctrl-F5(无需调试启动),这似乎有效。

要尝试的另一件事是转到工具|选项|调试 并取消选中“启用我的代码”选项。

答案 4 :(得分:1)

确保您对Microsoft.VisualStudio.QualityTools.UnitTestingFramework的引用是版本10.0.0.0。

如果是9.0.0.0版,则Visual Studio 2010中会出现此问题。

希望这会有所帮助。如果人们仍然有这个问题。

答案 5 :(得分:1)

我是rlandster所说的。清除“启用我的代码”调试选项为我解决了这个问题。它修复了断言和破坏预期异常的问题。在http://social.msdn.microsoft.com/Forums/en/vsdebug/thread/25bdf149-5133-4f47-bbf2-1d4ca638fee9处有更多细节。

答案 6 :(得分:0)

我遇到了同样的问题,但终于成功了。不太确定如何,但是这里列出了我之间没有工作的事情,当它再次开始工作时。

  • 将正在测试的项目转换为.NET 4
  • 关闭CodeCoverage
  • 再次启用CodeCoverage
  • 在测试项目上做了RebuildAll

不确定哪个位固定了它。无论如何,希望这有帮助!

答案 7 :(得分:0)

我最终将测试更改为此表单以避免破坏。不理想:

  [TestMethod]
  public void Guid()
  {
     try
     {
        Guid g = new Guid("myguid'123'");
     } 
     catch( FormatException fe)
     {
        return;  // expected exception - pass
     }

     Assert.Fail(); // exception not thrown - fail
  }