使用 mockito [Spring-Boot] [重复] 测试 void 函数 try/catch 块

Posted

技术标签:

【中文标题】使用 mockito [Spring-Boot] [重复] 测试 void 函数 try/catch 块【英文标题】:Test void function try/catch block with mockito [Spring-Boot] [duplicate] 【发布时间】:2021-10-06 01:57:29 【问题描述】:

我有以下情况。 我想使用 mockito 来测试我的服务功能的 try/catch 块:GettingMyDataService。请问有什么提示或技巧吗?

//in the controller
@GetMapping("/data")
public ResponseEntity gettingMyDataController(@RequestParam(request = true) String dataId) 

  gettingMyDataService.getDataFunction(dataId);

@Service
// my first service
public class GettingMyDataService 

  @AutoWired
   MyCustomRestClient myCustomRestClient

  
  public void getDataFunction(String dataId) 
    MyDataEntityDTO myDataEntityDTO; 
    
    try 
      myDataEntityDTO = myCustomRestClient.callReadExternalSIService(dataId);

     catch (HttpStatusException e) 
      if (e.getStatusCode().value() == 404) 
        throw new CustomException1(".......");
       
      else 
        throw new CustomException2(".....");
      
    

@Service
// 2nd service for RestTemplate
public class myCustomRestClient 
  
  public callReadExternalSIService(String dataId) 
    String uri = "http:// ..."

    HttpEntity<MyDataEntityDTO> res = RestTemplate.getForEntity(uri + dataId, MyDataEntityDTO.class);
  
    return res.getBody(); 
  


【问题讨论】:

太棒了!谢谢你:) 【参考方案1】:

让您的自定义 REST 客户端抛出异常的示例:

MyCustomRestClient mock = Mockito.mock(MyCustomRestClient.class);
HttpStatusCodeException exception = new HttpClientErrorException(HttpStatus.NOT_FOUND);
Mockito.doThrow(exception).when(mock).callReadExternalSIService("data");

【讨论】:

以上是关于使用 mockito [Spring-Boot] [重复] 测试 void 函数 try/catch 块的主要内容,如果未能解决你的问题,请参考以下文章

使用 Mockito 在 REST 控制器中模拟类

如何提供嵌入式数据库供 Mockito 使用?

基于spring-boot的应用程序的单元+集成测试方案

Mockito的参数匹配

android单元测试框架Mockito使用

为啥要使用 Mockito? [关闭]