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)

相关推荐
天若有情67313 小时前
SpringBoot4 + MyBatis 前后端分离实战|从零实现坏习惯管理系统,支持局域网手机访问CRUD
智能手机·mybatis
不能只会打代码14 小时前
Day 011 — Spring 全家桶深度拆解
spring boot·mybatis·spring aop·spring mvc·spring ioc
憧憬成为web高手1 天前
皮卡丘靶场速通--sql 2
数据库·sql·mybatis
测试修炼手册1 天前
[测试技术] TestNG 入门与实战:分组、数据驱动与并行执行
junit·单元测试·log4j
川石课堂软件测试2 天前
安全测试|常见SQL注入攻击方式、实例及预防
服务器·数据库·sql·功能测试·测试工具·安全·单元测试
Java面试题总结2 天前
mybatis插件
java·tomcat·mybatis
在水一缸2 天前
深入浅出 Catch2:现代 C++ 测试框架的优雅实践
开发语言·c++·单元测试·log4j·测试框架·catch2
花椒技术3 天前
AI Coding 后半程:6 类 QA Skills 如何接住测试与发布?
单元测试·ai编程·测试
疯狂打码的少年3 天前
【软件工程】软件测试阶段:单元测试与集成测试(高频对比考点)
笔记·单元测试·集成测试·软件工程
Devin~Y3 天前
互联网大厂Java面试实战:Spring Boot、MyBatis、Redis、Kafka、JWT、Spring Cloud 与 AI 场景追问
java·spring boot·redis·spring cloud·kafka·mybatis·spring security