mockito模拟静态方法报错:org.mockito.exceptions.misusing.MissingMethodInvocationException.求解

controller代码:

@PostMapping("/exportAllBank/{contracts}")
@PreAuthorize("hasAuthority('contract:exportAllBank')"
public ResponseResult exportAllBank(@PathVariable("contracts") List<Integer> contracts){
  //获取转换后的list
  List<ContractDto> contractDtoList = contractService.selectAllBank(contracts);
  //如果目录不存在,创建目录
  execlServer.createDirectory(Constants.excelDirectory);
  //导出文件的存放路径及名字
  String fileName = Constants.excelDirectory+ System.currentTimeMillis()+"contract.xlsx";
  EasyExcel.write(fileName,ContractDto.class)
          .sheet("业务信息")
          .doWrite(contractDtoList);
  return ResponseResult.succ("导出成功:"+fileName);
}

test代码:

@Test
@WithMockUser(authorities = "contract:exportAllBank")
void exportAllBank() throws Exception {
    List<Integer> contracts = new ArrayList<>();
    List<ContractDto> contractDtoList = new ArrayList<>();
    when(contractService.selectAllBank(contracts)).thenReturn(contractDtoList);
    doNothing().when(execlServer).createDirectory(Constants.excelDirectory);
    ExcelWriterBuilder excelWriterBuilder = mock(ExcelWriterBuilder.class);
    ExcelWriterSheetBuilder excelWriterSheetBuilder = mock(ExcelWriterSheetBuilder.class);
    try (MockedStatic<EasyExcel> mb = Mockito
    .mockStatic(EasyExcel.class)){
        mb.when(() -> EasyExcel.write("", ContractDto.class))
                .thenReturn(excelWriterBuilder);
        when(excelWriterBuilder.sheet(any(String.class))).thenReturn(excelWriterSheetBuilder);
        doNothing().when(excelWriterSheetBuilder).doWrite(contractDtoList);
    }
    ResultActions resultActions = mockMvc.perform(MockMvcRequestBuilders
    .post("/contract/exportAllBank/{contracts}",1)
    .accept(MediaType.APPLICATION_JSON_VALUE)
    );
    resultActions.andReturn().getResponse().setCharacterEncoding("UTF-8");
    resultActions.andDo(MockMvcResultHandlers.print());
    resultActions.andExpect(MockMvcResultMatchers.status().isOk());
}

控制台报错:

org.mockito.exceptions.misusing.MissingMethodInvocationException: 
when() requires an argument which has to be 'a method call on a mock'.
For example:
    when(mock.getArticles()).thenReturn(articles);

Also, this error might show up because:
1. you stub either of: final/private/equals()/hashCode() methods.
   Those methods *cannot* be stubbed/verified.
   Mocking methods declared on non-public parent classes is not supported.
2. inside when() you don't call method on mock but on some other object.
 

网上搜索的解决方案是使用powerMockito,使用了之后报另外的错误,搜索后发现其不兼容Junit5,于是我弃用了该解决方案。目前网上没有找到可以解决此问题的方法,求大神解答。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
第1章:对Spring框架进行宏观性的概述,力图使读者建立起对Spring整体性的认识。   第2章:通过一个简单的例子展现开发Spring Web应用的整体过程,通过这个实例,读者可以快速跨入Spring Web应用的世界。   第3章:讲解Spring IoC容器的知识,通过具体的实例详细地讲解IoC概念。同时,对Spring框架的三个最重要的框架级接口进行了剖析,并对Bean的生命周期进行讲解。   第4章:讲解如何在Spring配置文件中使用Spring 3.0的Schema格式配置Bean的内容,并对各个配置项的意义进行了深入的说明。   第5章:对Spring容器进行解构,从内部探究Spring容器的体系结构和运行流程。此外,我们还将对Spring容器一些高级主题进行深入的阐述。   第6章:我们从Spring AOP的底层实现技术入手,一步步深入到Spring AOP的内核中,分析它的底层结构和具体实现。   第7章:对如何使用基于AspectJ配置AOP的知识进行了深入的分析,这包括使用XML Schema配置文件、使用注解进行配置等内容。   第8章:介绍了Spring所提供的DAO封装层,这包括Spring DAO的异常体系、数据访问模板等内容。   第9章:介绍了Spring事务管理的工作机制,通过XML、注解等方式进行事务管理配置,同时还讲解了JTA事务配置知识。   第10章:对实际应用中Spring事务管理各种疑难问题进行透彻的剖析,让读者对Spring事务管理不再有云遮雾罩的感觉。   第11章:讲解了如何使用Spring JDBC进行数据访问操作,我们还重点讲述了LOB字段处理、主键产生和获取等难点知识。   第12章:讲解了如何在Spring中集成Hibernate、myBatis等数据访问框架,同时,读者还将学习到ORM框架的混用和DAO层设计的知识。   第13章:本章重点对在Spring中如何使用Quartz进行任务调度进行了讲解,同时还涉及了使用JDK Timer和JDK 5.0执行器的知识。   第14章:介绍Spring 3.0新增的OXM模块,同时对XML技术进行了整体的了解。   第15章:对Spring MVC框架进行详细介绍,对REST风格编程方式进行重点讲解,同时还对Spring 3.0的校验和格式化框架如果和Spring MVC整合进行讲解。   第16章:有别于一般书籍的单元测试内容,本书以当前最具实战的JUnit4+Unitils+ Mockito复合测试框架对如何测试数据库、Web的应用进行了深入的讲解。   第17章:以一个实际的项目为蓝本,带领读者从项目需求分析、项目设计、代码开发、单元测试直到应用部署经历整个实际项目的整体开发过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值