C#单元测试ExpectedException

时间:2014-09-17 14:39:28

标签: c# mstest

我为ExpectedExceptionBaseAttribute:

创建了单元测试的自定义属性
public class ExpectedEngineExceptionAttribute : ExpectedExceptionBaseAttribute

我覆盖了验证方法,如下所示:

    protected override void Verify(Exception exception)
    {
        RethrowIfAssertException(exception);
        throw new Exception("Hola!!");
    }

这是TestMethod(它调用抛出a的方法):

    [TestMethod]
    [ExpectedEngineExceptionAttribute()]
    public void MyTest()
    {
        SomeCode();
    }

单元测试窗口中的输出显示:

Exception has been thrown by the target of an invocation.

我会看到消息Hola !!

当我运行以下测试方法时:

    [TestMethod]
    [ExpectedException(typeof(EngineException))]
    public void MyTest2()
    {
        SomeCode();
    }

输出结果为:

  

测试方法NotificationInputAttributeInvalidTypeTest引发异常System.Exception,但是期望引擎异常。异常消息:System.Exception:SS

在输出窗口中显示“Hola”异常消息时,我错过了什么?

我反编译了ExpectedExceptionAttribute,并在我的自定义属性中执行了它的操作,但是它没有工作......

更新:添加断点确认抛出异常(“Hola !!”):

enter image description here

2 个答案:

答案 0 :(得分:1)

RethrowIfAssertException在

时抛出异常

"如果它是AssertFailedException或者AssertInconclusiveException,那么再次引发异常"

所以,如果这是一个例外,它将永远不会到达你的" Hola"例外抛出。

http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.expectedexceptionbaseattribute.rethrowifassertexception.aspx

答案 1 :(得分:0)

它在VS 2013 Update 2中完美运行: enter image description here

守则:

    [TestClass]
    public class MyTests
    {
       [TestMethod]
       [ExpectedEngineExceptionAttribute]
       public void MyTest()
       {
           throw new Exception("HI");
       }
     }

    public class ExpectedEngineExceptionAttribute : ExpectedExceptionBaseAttribute
    {
       protected override void Verify(Exception exception)
       {
           RethrowIfAssertException(exception);
           throw new Exception("Hola!!!");
       }
    }