单元测试-异常测试

前面的文章(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);
}
posted @   浪迹天涯的派大星  阅读(486)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示