当前位置:   article > 正文

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

mockito mybatisplus
1、首先使用SquareTest插件生成模板 
    
2、生成后会测试类中会出现一个当前类的属性值
    例如:测试类名为A 生成的被测试类中会有一个
    private AServiceImpl AServiceImplTest;
	需要在属性上面加上注解@InjectMocks
    @InjectMocks
    private AServiceImpl AServiceImplTest;
3、添加当前所属实体类的Mapper
   @Mock
    private AMapper mockAMapper
4、新增before方法
    @BeforeEach
    void before() {
        TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new MybatisConfiguration(), ""), A.class);
    }
5、删除setUp方法中的创建对象的代码
     @BeforeEach
    void setUp() {
        AServiceImplTest = new AServiceImpl();//下面还有很多赋值操作,只需删除此行即可
    	...
        ...
    }    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
1、 调用其他service层方法
    被测试代码(查询):
    	        List<实体类> list = bService.lambdaQuery()
                .eq(字段名,值)
                .orderByDesc(字段名)
                .list();//.one

	测试代码(查询):
    	//测试时不用管被测试代码的sql拼接条件,只需要注意调用的方法即可
        TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new MybatisConfiguration(), ""), 实体类.class);//提升复用性,此行代码可以放在before方法中
        实体类Mapper mapper = mock(实体类Mapper.class);
        LambdaQueryChainWrapper<实体类> queryChainWrapper = new LambdaQueryChainWrapper<>(mapper);
        when(mockBService.lambdaQuery()).thenReturn(queryChainWrapper);
        when(queryChainWrapper.list()).thenReturn(Arrays.asList());//.one时 queryChainWrapper.one()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
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);

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
3、其他问题
1、如果报错: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: can not find lambda cache for this entity [com.gogbuy.cyb.xxx.xxx.entity.实体类]
添加此行代码即可    
    
     TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new MybatisConfiguration(), ""), 实体类.class);

2、本测试类不能和别的mapper兼容的问题(报空指针异常):

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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号