使用 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<>()
有没有办法用 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<>()