单元测试-异常测试
前面的文章(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); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通