应该测试异常消息

Ste*_*fen 31 c# exception-handling shouldly

有没有办法用shouldly测试异常消息?

一个例子:

public class MyException: Exception{
}
Run Code Online (Sandbox Code Playgroud)

要测试的方法:

public class ClassUnderTest
{
    public void DoSomething() 
    {
        throw new MyException("Message");
    }
}
Run Code Online (Sandbox Code Playgroud)

我通常会以这种方式测试它:

[TestMethod]
public void Test()
{
    try
    {
        new ClassUnderTest().DoSomething();
        Assert.Fail("Exception not thrown");
    } catch(MyException me)
    {
        Assert.AreEqual("Message", me.Message);
    }catch(Exception e)
       Assert.Fail("Wrong exception thrown");
    }
}
Run Code Online (Sandbox Code Playgroud)

我应该现在可以测试是否抛出异常:

[TestMethod]
public void TestWithShouldly()
{
    Should.ThrowException<MyException>(() => new ClassUnderTest().DoSomething());
}
Run Code Online (Sandbox Code Playgroud)

但是我如何测试异常的消息呢?

Col*_*kay 48

更新:从现在的V3开始Should.Throw<>()

Should.ThrowException()方法返回异常,因此您可以继续测试是否有其他事情.

例如:

Should.ThrowException<MyException>(() => new ClassUnderTest().DoSomething())
    .Message.ShouldBe("My Custom Message");
Run Code Online (Sandbox Code Playgroud)

或者,如果您想做的不仅仅是测试消息:

MyException ex = Should.ThrowException<MyException>(() => new ClassUnderTest().DoSomething());
Run Code Online (Sandbox Code Playgroud)

然后你可以做你喜欢的事ex.

  • 显然,在最新版本中应该是`Throw <MyException>` (11认同)