应该测试异常消息

时间:2016-11-11 08:11:48

标签: c# exception-handling shouldly

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

一个例子:

public class MyException: Exception{
}

要测试的方法:

public class ClassUnderTest
{
    public void DoSomething() 
    {
        throw new MyException("Message");
    }
}

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

[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");
    }
}

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

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

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

1 个答案:

答案 0 :(得分:37)

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

Should.ThrowException()方法返回异常,因此您可以继续测试其他内容。

例如:

Should.ThrowException<MyException>(() => new ClassUnderTest().DoSomething())
    .Message.ShouldBe("My Custom Message");

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

MyException ex = Should.ThrowException<MyException>(() => new ClassUnderTest().DoSomething());

然后,您可以使用ex执行您喜欢的操作。