单元测试-异常测试

前面的文章(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 @ 2023-07-06 16:21  浪迹天涯的派大星  阅读(602)  评论(0)    收藏  举报