前面的文章(Java中的单元测试)已经说过单元测试中的mock测试,大都是正常分支下的测试,异常测试用于测试某些场景下是否会触发指定的异常,用来验证代码逻辑的正确性。目前根据Junit的版本有三种不同的方式,如下:
1、@Test注解中的expected属性
此方式比较简单,但是存在局限性,就是只能判断异常类型,无法判断详细的异常信息,现在大多数业务代码中的自定义异常都是运行时异常,需要通过错误码和错误信息来判断异常是否是期望的异常。
@Test(expected = BusinessRuntimeException.class)
public void testCommentEditExceptionotherCreator(){
service.test();
}
2、ExpectedException的方式
这种方式需要ExpectedException搭配@Rule注解,这种方式可以指定异常的类型和异常信息,并可以通过实现匹配器来匹配复杂的异常信息,能比较精准的判断异常场景。在Junit比较高的版本,none()方法已经弃用。
@Rule
ExpectedException expectedException = ExpectedException.none();
@Test
public void testCommentEditExceptionotherCreator(){
expectedException.expect(BusinessRuntimeException.class);
expectedException.expectMessage("文档不存在");
serviceImpl.editComment(null);
}
3、Assert.assertThrows()
Junit较高版本中,已经支持通过断言方式匹配指定异常,使用方法很简单,示例如下:
@Test
public void testCommentEditException(){
//断言异常
Assert.assertThrows("异常信息",BusinessRuntimeException.class,() -> serviceImpl.editComment(null);
}
标签:ExpectedException,单元测试,BusinessRuntimeException,测试,Test,异常
From: https://www.cnblogs.com/zhaodalei/p/17528551.html