Java 使用junit 5测试预期的异常消息
我有一个项目,在那里我有测试,我故意造成一个问题,然后验证代码的响应方式我想要它。为此,我想确保异常不仅是正确的类,而且还必须包含正确的消息 所以在其中一个例子中,我有类似的东西:Java 使用junit 5测试预期的异常消息,java,junit,junit4,junit5,Java,Junit,Junit4,Junit5,我有一个项目,在那里我有测试,我故意造成一个问题,然后验证代码的响应方式我想要它。为此,我想确保异常不仅是正确的类,而且还必须包含正确的消息 所以在其中一个例子中,我有类似的东西: public class MyTests { @Rule public final ExpectedException expectedEx = ExpectedException.none(); @Test public void testLoadingResourcesTheBadWay(){
public class MyTests {
@Rule
public final ExpectedException expectedEx = ExpectedException.none();
@Test
public void testLoadingResourcesTheBadWay(){
expectedEx.expect(MyCustomException.class);
expectedEx.expectMessage(allOf(startsWith("Unable to load "), endsWith(" resources.")));
doStuffThatShouldFail();
}
}
我目前正在考虑完全迁移到JUnit5,它不再支持,现在有了
我还没有弄清楚如何编写一个测试,不仅检查抛出的异常(类),而且还检查附加到该异常的消息
在Junit 5中编写这样一个测试的正确方法是什么?感谢@michalk和我的一位同事,这很有效:
Exception expectedEx = assertThrows(MyCustomException.class, () ->
doStuffThatShouldFail()
);
assertTrue(expectedEx.getMessage().startsWith("Unable to load "));
assertTrue(expectedEx.getMessage().endsWith(" resources."));
由于返回异常的实例,您可以对返回的实例调用getMessage
,并对此消息进行断言:
Executable executable = () -> sut.method(); //prepare Executable with invocation of the method on your system under test
Exception exception = Assertions.assertThrows(MyCustomException.class, executable); // you can even assign it to MyCustomException type variable
assertEquals(exception.getMessage(), "exception message"); //make assertions here
assertThrows
返回一个异常,因此您可以对返回的实例调用getMessage
,并对该消息进行断言。