赞
踩
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();//下面还有很多赋值操作,只需删除此行即可 ... ... }
被测试代码(查询):
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()
被测试代码(新增): 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、如果报错: 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();
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。