Mockito Mybatis-plus 单元测试

1. mock Mybatis-plus 自带 ServiceImpl方法问题

  • 分析

    mybatis-plus 自带的ServiceImpl,其实其最后执行使用的是我们所创建的Mapper,他最终会注入到 ServiceImpl的baseMapper中
    - 示例

    1. 业务代码

      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);
          }
    2. 测试代码

      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);
      	    }
      	
      	}
      	```
    3. 依赖

      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)

相关推荐
无心道人c1 小时前
SonarQube7.6实现C#自定义规则
单元测试·自动化·sonar
汽车仪器仪表相关领域1 小时前
多气精准检测,全场景适配——NHA-506/406型汽车排放气体测试仪项目实战分享
大数据·功能测试·单元测试·汽车·可用性测试·安全性测试
林shir2 小时前
3.6-Web后端基础(java操作数据库)
spring·mybatis
super_lzb15 小时前
mybatis拦截器ParameterHandler详解
java·数据库·spring boot·spring·mybatis
CodeAmaz1 天前
MyBatis 分页插件实现原理(Interceptor 机制 + SQL 改写)
mybatis·分页插件
CodeAmaz1 天前
MyBatis 如何实现“面向接口”查询
mybatis·面向接口
卓码软件测评1 天前
第三方软件国产化测评机构【API验收测试,除了Postman,还有什么推荐工具?】
测试工具·ci/cd·性能优化·单元测试·测试用例·postman
此剑之势丶愈斩愈烈1 天前
mybatis-plus乐观锁
开发语言·python·mybatis
shughui1 天前
JMeter(二):什么是jmeter参数化?为什么需要它?如何使用
测试工具·jmeter·性能优化·单元测试
雨中飘荡的记忆1 天前
MyBatis数据源模块详解
mybatis