使用 Shouldly 测试异常消息

Testing Exception Messages with 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");
    }
}

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

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

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

Should.Throw()方法returns异常,所以可以继续测试其他东西。

例如:

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

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

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

然后您可以使用 ex 做您喜欢的事。

注意:V2应该使用Should.ThrowException<>()