1. mock Mybatis-plus 自带 ServiceImpl方法问题
-
分析
mybatis-plus 自带的ServiceImpl,其实其最后执行使用的是我们所创建的Mapper,他最终会注入到 ServiceImpl的baseMapper中
- 示例-
业务代码
java// 实体 public class UtilSaleData { } // mapper public interface UtilSaleDataMapper extends BaseMapper<UtilSaleData> { } // service public class UtilSaleDataServiceImpl extends ServiceImpl<UtilSaleDataMapper, UtilSaleData> implements UtilSaleDataService { @Override public List<UtilSaleData> selectSaleDataList(String id) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<UtilSaleData>() .eq(StringUtils.isNotBlank(id), UtilSaleData::getId, id); return list(queryWrapper); }
-
测试代码
java@RunWith(MockitoJUnitRunner.class) // 使用Mockito运行器 public class MockTest { @InjectMocks // 被测对象 private UtilSaleDataServiceImpl productService; @Mock // mock模拟对象依赖注入 private UtilSaleDataMapper mapper; @Test public void findProductByIdTest2() { List<UtilSaleData> list = new ArrayList<>(); UtilSaleData utilSaleData = new UtilSaleData(); utilSaleData.setId("22222"); list.add(utilSaleData); // 模拟结果 selectList 结果 Mockito.when(mapper.selectList(any())).thenReturn(list); List<UtilSaleData> list1 = productService.selectSaleDataList("1"); System.out.println(list1); } } ```
-
依赖
xml<dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <version>3.7.7</version> <scope>test</scope> </dependency>
-
-
解释
我想要mock的方法是selectSaleDataList方法里面的 list(queryWrapper)方法结果,使其不调用数据库,但是list实际调用的是mapper的selectList方式,所以上面mock时用的是Mockito.when(mapper.selectList(any())).thenReturn(list)