0


针对mockito框架在单元测试中出现Mybatis-Plus链式调用的解决方案

1、首先使用SquareTest插件生成模板 
    
2、生成后会测试类中会出现一个当前类的属性值
    例如:测试类名为A 生成的被测试类中会有一个
    privateAServiceImplAServiceImplTest;
    需要在属性上面加上注解@InjectMocks@InjectMocksprivateAServiceImplAServiceImplTest;3、添加当前所属实体类的Mapper@MockprivateAMapper mockAMapper
4、新增before方法
    @BeforeEachvoidbefore(){TableInfoHelper.initTableInfo(newMapperBuilderAssistant(newMybatisConfiguration(),""),A.class);}5、删除setUp方法中的创建对象的代码
     @BeforeEachvoidsetUp(){AServiceImplTest=newAServiceImpl();//下面还有很多赋值操作,只需删除此行即可......}
1、 调用其他service层方法
    被测试代码(查询):
                List<实体类> list = bService.lambdaQuery().eq(字段名,值).orderByDesc(字段名).list();//.one

    测试代码(查询):
        //测试时不用管被测试代码的sql拼接条件,只需要注意调用的方法即可TableInfoHelper.initTableInfo(newMapperBuilderAssistant(newMybatisConfiguration(),""), 实体类.class);//提升复用性,此行代码可以放在before方法中
        实体类Mapper mapper =mock(实体类Mapper.class);LambdaQueryChainWrapper<实体类> queryChainWrapper =newLambdaQueryChainWrapper<>(mapper);when(mockBService.lambdaQuery()).thenReturn(queryChainWrapper);when(queryChainWrapper.list()).thenReturn(Arrays.asList());//.one时 queryChainWrapper.one()
2、 调用本service层方法
    
    被测试代码(新增):
        boolean b =super.save(实体类);//boolean b = this.save(实体类)也一样

    测试代码(新增):
        when(AServiceImplTest.getBaseMapper().insert(any())).thenReturn(1);

    
    被测试代码(查询):
        List<CybCar> carList =lambdaQuery().eq(字段名, 值).eq(字段名, 值).eq(字段名, 值).orderByDesc(字段名).list();

    测试代码(查询):
         when(serviceImpl.getBaseMapper().selectList(any())).thenReturn();

    被测试代码(更新):
        boolean b =super.updateById();//boolean b = this.updateById()也一样

    测试代码(更新):
        when(AServiceImplTest.getBaseMapper().updateById(any())).thenReturn(1);
3、其他问题
1、如果报错: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: can not find lambda cache forthis entity [com.gogbuy.cyb.xxx.xxx.entity.实体类]
添加此行代码即可    
    
     TableInfoHelper.initTableInfo(newMapperBuilderAssistant(newMybatisConfiguration(),""), 实体类.class);2、本测试类不能和别的mapper兼容的问题(报空指针异常):

        实体类Mapper mockUMapper =mock(实体类Mapper.class);AServiceImplTest.实体类Mapper= mockUMapper;when(mockUMapper.xxx()).thenReturn();

本文转载自: https://blog.csdn.net/m0_61260825/article/details/133747349
版权归原作者 Liu_Tong01 所有, 如有侵权,请联系我们删除。

“针对mockito框架在单元测试中出现Mybatis-Plus链式调用的解决方案”的评论:

还没有评论