2010-04-13 65 views
20

今天我升级了我的解决方案,将VS2008的所有基础项目升级到VS2010。除了我的单元测试以外,一切都很顺利。ExpectedException on TestMethod Visual Studio 2010

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

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

而且例如我的测试之一:

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

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

编辑 我在2008年和2010年看了看例外设置(Ctrl + Alt + E)在这两个版本的设置是相同的。然而,在2008年,当我拥有ExpectedException属性时,调试不会中断。在2010年它确实破裂。

+0

测试有不同的结果吗?预期的例外是否仍然有效?调试时它有什么不同吗? – 2010-06-28 11:30:00

回答

2

按下Ctrl + Alt + E并检查CLR异常的异常中断设置。如果这设置为true,那么您描述的行为将发生。

+0

这意味着这已在2010年发生了变化?这些设置是项目还是解决方案? – Joop 2010-04-13 11:25:26

+0

我有两个选择:抛出异常时中断,异常时中断是用户未处理的。只有最后一个选项检查CLR异常。 – Joop 2010-04-13 11:32:50

+0

解决方案的一部分确实从这里开始。详情请参阅我自己的答案。 – Dabblernl 2010-06-29 23:00:12

0

我有同样的问题,但最终设法得到它的工作。不知道如何,但这是我做的事情之间的一个列表,它不工作,当它再次开始工作。

  • 转换的项目被测试.NET 4
  • 熄灭代码覆盖率
  • 转身代码覆盖率重新打开
  • 没过RebuildAll上测试项目

不知道该位固定它虽然。无论如何,希望这有助于!

+1

我有VS2010专业版。代码覆盖率仅在Premium和Ultimate中可用。但是,谢谢你的建议! – Joop 2010-04-19 10:20:17

+0

我认为我做的其他事情是继续Test-> Edit Test Settings,然后执行Save As,通过编写以前的文件。理论上这应该不会有效果,但我确实已经读过有人删除了他的测试设置文件,并且对他的问题进行了排序。 HTH – 2010-04-19 16:36:29

+0

不幸的是,这也是行不通的。真的很奇怪的行为。 – Joop 2010-04-23 07:07:21

1

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

如果是9.0.0.0版本将出现在Visual Studio这个问题2010年

希望这有助于。如果人们仍然有这个问题。

+0

在我的测试项目中,我已经使用10.0.0.0版本。 – Joop 2010-05-27 11:52:08

+0

-1:vs 2008支持ExpectedException – 2010-06-27 16:46:55

+1

@John:这不是因为2008不支持预期的异常。这是因为属性类不一样。如果您引用了2008年的测试框架,编译器会将2008年的属性放在您的测试类中。测试运行程序仅检查2010的属性(不同的程序集=>不同的类),因此它根本不能识别该属性。我们遇到了同样的问题。 – 2010-06-28 16:11:18

12

Gerrie我指出了正确的方向:

  • 按Ctrl-Alt-E
  • 打开公共语言运行库Excepions节点
  • 单击添加
  • 类型Microsoft.VisualStudio.TestTools.UnitTesting .AssertFailedException
  • 确保两个复选框均未选中。

这将消除失败断言的中断,但当您设置ExpectedException时,测试仍然会中断。

我是设置100个红利这种情况的一个,所以一些upvotes将不胜感激;-)

+1

那么,在2013年仍然有帮助,所以有你upvote :) – acarlon 2013-09-12 03:05:44

+0

我添加了条目,并没有为我工作(VS2015 R3)。你的意思是“这两个复选框未被选中”。我没有选中我添加的那个(Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException)。其他复选框取消选中是什么? – inliner49er 2017-02-02 03:04:21

2

Microsoft支持家伙告诉我要使用Ctrl-F5(启动而不调试)运行我的单元测试时, ,这似乎工作。

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

+0

只是我的代码解决了我的情况 – 2012-02-22 22:40:42

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 
    }