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、 调用其他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()
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 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();
文章来源地址https://www.toymoban.com/news/detail-819798.html
文章来源:https://www.toymoban.com/news/detail-819798.html
到了这里,关于针对mockito框架在单元测试中出现Mybatis-Plus链式调用的解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!