当前位置: 首页 > 知识库问答 >
问题:

如何使用Junit 5测试Spring Boot服务捕获块?

龚博涛
2023-03-14

在我的业务逻辑中,我没有任何异常场景,不知道如何在sprint引导服务类中测试catch块。大多数场景都是在控制器级别处理的。

但是对于声纳覆盖,我需要在我的服务中覆盖捕获块。

我的示例代码如下

public void employeeDetails(Object Employee) throws CustomException {
        try {
            int count = commonUtils.calculateEmployeeCount(Employee)
        } catch (Exception e) {
            throw new CustomException(" Exception occurred", e);
        }
    } 

我的业务逻辑是否应该有任何失败场景要测试,或者我们可以选择模拟自定义虚拟异常以进行测试。任何人都请就此提出建议。

参考文献

如何断言JUnit 4测试中抛出了某个异常?

如何在我的代码中测试try-catch块

共有1个答案

韶浩皛
2023-03-14

我假设一个类EmployeeServiceImpl使用方法void EmployeeDetails(Object Employee)实现EmployeeService。注意,根据代码约定,方法的名称以小写开头,因此我将在回答中遵循这种约定。

public void employeeDetails(Object employee) throws CustomException {
    try {
        int count = calculateEmployeeCount(employee)
    } catch (Exception e) {
        throw new CustomException("Exception occurred", e);
    }
} 

您需要实现calculateEmployeeCount方法来抛出异常,异常可以是exception的任何子类型。为此,您需要具有此类方法的类的实例。应该使用@MockBean对实例进行模拟,或者如果它是我们的EmployeeServiceImpl,则使用@SpyBean进行部分模拟,而不是使用@Autowired对生产bean进行模拟,其中注入的bean优先于测试bean(@MockBean)。

假设您将Spring测试启动器与Mockito一起使用,并且具有计算表员工计数方法的相同类(从其名称判断)。

@SpyBean
private EmployeeService employeeService;
Mockito.when(employeeService.calculateEmployeeCount())
       .thenThrow(new Exception("An exception"));

最后一步是验证是否抛出了CustomException

Object employee = new Object();                        // it doesn't need to be a mock

CustomException exception = Assertions.assertThrows(
     CustomException.class,
     () -> employeeService.employeeDetails(employee));

// the thrown exception is available fur further testing (of the message, cause etc.)
 类似资料:
  • 问题内容: 我对Java单元测试非常陌生,听说Mockito框架对于测试非常有用。 我已经开发了一个REST Server(CRUD方法),现在我想对其进行测试,但是我不知道如何? 我什至不知道该测试程序应该如何开始。我的服务器应该在本地主机上运行,​​然后在该URL上进行调用(例如,本地主机:8888)? 这是我到目前为止尝试过的方法,但是我很确定这不是正确的方法。 这是方法的代码。 在此测试用

  • 问题内容: 我只想在不引导Angular的情况下测试服务。 我看了一些例子和教程,但是我什么也不会去。 我只有三个文件: myService.js:在这里定义AngularJS服务 test_myService.js:在这里定义服务的Jasmine测试。 specRunner.html:一个具有常规茉莉花配置的HTML文件,在其中导入了前两个其他文件以及茉莉花,Angularjs和angular-

  • 我有一个服务器,用Java编写的,那是我的应用程序,我想在上面运行一些测试。我正在使用gradle来管理依赖项和构建任务等,所以我也想在这方面使用它。我需要启动服务器,然后运行我的单元测试,这会对它发出一堆HTTP请求,然后在测试完成后,理想情况下甚至关闭服务器。所以我尝试在build.gradle中添加(jettyRunWar是运行服务器的工具),但我想这太简单了,因为从不从jettyRunWa

  • 如何使用JUnit5测试抛出NullPointerException的方法。但是我在方法中捕获到了这个异常,因此test以错误结尾:“Expected java.lang.NullPointerException to be thrown,But nothing was thrown”。 谢谢

  • 我有一个生成屏幕截图的类: 我的应用程序是用创建的,我需要对它进行测试。但我得到 我的测试: 我试图防止无头异常: 我使用的是spring启动版本1.5.6。 但这无济于事。我得到日志: java.awt.HeadlessException在sun.awt.HeadlesStoolKit.GetScreenSize(headlesStoolKit.java:284)在org.robinhood.i