断言失败的异常未在用户代码中处理

时间:2013-10-31 01:47:22

标签: asp.net unit-testing

当我进行单元测试时,如下所示,可以告诉我这有什么问题:

  

类型的例外   'Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException'   发生在Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll中   但未在用户代码中处理

3 个答案:

答案 0 :(得分:8)

我在Visual Studio 2012中遇到过这个问题。以下是我修复它的方法:

在弹出的异常中,我旁边有一个复选框 “当用户不处理此类异常时中断。”

取消选中 此框。

有时它会让你感到简单。 :)

1年后更新:)

所以这不属于这个特定的问题,但我学到了另一个技巧来隐藏非Microsoft .dll抛出的异常。 (Assert.Failed位于其中一个系统库中,因此OP不需要使用此技巧。)

你可能已经注意到,当未处理时,一些异常会神秘地继续中断,即使你取消选中“抛出此异常类型时的中断”框。

这是有原因的! Visual Studio不知道如何识别该异常类型。

以下是如何教它一个新技巧:

  1. 获取完整的异常名称及其所有命名空间。例如,您将需要“MySql.Data.MySqlClient.MySqlException”,而不仅仅是“MySqlException”。单击异常弹出窗口中的“查看详细信息”以获取此信息。
  2. 转到调试菜单 - >异常。
  3. 点击“添加....”按钮。
  4. 在显示的弹出窗口中,选择您要添加新例外的子分组。对于MySql,我使用了“公共语言运行时异常”,但选择对你有意义的组。不幸的是,我不相信你可以自己添加。
  5. 对于例外名称,请输入您在步骤1中找到的完全限定的例外名称。
  6. 保存,然后取消选中“投掷”框,以获取闪亮的新异常!
  7. 添加例外后,您还可以使用弹出窗口中的“在抛出此异常时中断”复选框。

    快乐的编码!

答案 1 :(得分:2)

您使用的是什么版本的MS Test(哪个Visual Studio)?

是否在抛出异常时进行调试?

看起来这里有一篇文章,里面有一些关于为什么会发生这种情况的线索:

http://connect.microsoft.com/VisualStudio/feedback/details/511897/expectedexception-still-causes-debugging-to-break-with-exception-was-unhandled-by-user-code

答案 2 :(得分:-1)

我遇到了这个问题,我发现link可能有所帮助。

  
    

当附加调试器时,单元测试在Silverlight中的工作方式有点奇怪 - 当Assert失败时     你的一个单元测试,Visual Studio调试器打破了     执行并调出调试器对话框。如果你想跑一个     一大堆单元测试,看看哪些是失败的,或者你只是     关心代码抛出的异常,这个功能可以     真的很抽筋你的风格。值得庆幸的是,编辑它很容易     调试器设置使这些断言异常消失。

  
     
      
  • 步骤1:转到Visual Studio 2010中的“调试”菜单,选择“例外...”
  •   
  • 步骤2:在“例外”对话框中,单击“添加...”
  •   
  • 步骤3:注册要调整的异常类型从“类型”菜单中,选择“公共语言运行时异常”。在名字里   文本框,类型   Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException。   单击“确定”。
  •   
  • 步骤#4:对Microsoft.VisualStudio.TestTools.UnitTesting.AssertInconclusiveException重复步骤#2和#3
  •   
  • 步骤5:取消选中您刚刚添加的例外的投掷和用户未处理。
  •   
  • 步骤6:在“例外”对话框中,单击“确定”
  •   
  • 第7步:享受新的简化例外。
  •   

然而在我的情况下,我有它,因为使用属于单元测试库的断言与使用nunit之间的冲突。 当我删除该冲突时,我的测试按预期工作。