针对mockito框架在单元测试中出现Mybatis-Plus链式调用的解决方案

这篇具有很好参考价值的文章主要介绍了针对mockito框架在单元测试中出现Mybatis-Plus链式调用的解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

到了这里,关于针对mockito框架在单元测试中出现Mybatis-Plus链式调用的解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Mybatis-plus多数据源单元测试@MybatisPlusTest

    mybatis-plus多数据源单元测试报错 错误原因分析 多数据源,但是不能取到数据信息 解决方案 在注解中添加 @ImportAutoConfiguration(value = {RmasDataSourceConfig.class}, exclude = DataSourceAutoConfiguration.class) 注意事项 1.@Test添加以后,没有启动键,后来发现引入的包不对,必须引入 org.junit.jup

    2024年02月11日
    浏览(42)
  • Springboot优雅单元测试之mapper的测试(基于mybatis-plus)

    基于springboot的工程,正常单元测试,可以利用IDEA的goto功能自动生成对应的测试类(测试方法),然后在生成的测试类加注解@SpringBootTest,执行对应的test方法即可。但是这样默认是会启动整个springboot应用的,如果有web,还会启动web容器。这个时间比较久, 不够优雅 。 直接撸

    2024年02月11日
    浏览(44)
  • Mybatis 的多种标签使用以及 Spring 框架单元测试

    在讲解 Mybatis 的标签之前, 要先介绍一下另一个 Java 的好帮手 Spring 框架内置的 JUnit 测试框架. 为什么要在 Mybatis 学习之前了解 JUnit 呢 ? 很大一部分原因不仅仅是因为单元测试是写完项目后开发人员自己需要做的, 更重要的是当前阶段学习中, 利用 JUnit 可以更简单的构造数据来

    2024年02月09日
    浏览(55)
  • 【单元测试】Mockito使用详解

    一个单元测试应该有如下特点: 应该是自动化的 应该可以快速运行 每个单元测试不应该依赖其它测试的结果和执行顺序,单元测试框架可以按任意的顺序执行每个测试 每个单元测试不应该依赖数据库,外部文件,或者任何长时间运行的任务。单元测试应该是独立的,不应该

    2024年04月15日
    浏览(87)
  • 单元测试与Mockito

    系列文章目录和关于我 最近在新公司第一次上手写代码,写了一个不是很难的业务逻辑代码,但是在我写单元测试的时候,发现自己对单元测试的理解的就是一坨,整个过程写得慢,还写得臭。造成这种局面我认为是因为: 对Mockito api是不是很熟悉 没有自己单元测试方法论

    2023年04月22日
    浏览(41)
  • Mockito单元测试异常情况

    一、空指针异常 例子: 使用Collectors.groupingBy()进行分组时, 分组值存在null值 。 解决办法:分组值为null时,默认值为空字符,或者让数据不为空。 二、多个参数匹配异常 例如: 如果a和b一个是正常传参(list、map、string…)另一个是任意万能传参(any()、anyList()、anyString(

    2024年02月07日
    浏览(50)
  • Mockito单元测试详解

    依赖: SpringBoot默认的Mock框架是Mockito,和junit一样,只需要依赖spring-boot-starter-test就可以了 (1)@RunWith 指定运行环境,例: @RunWith(SpringRunner.class) Junit运行Spring的测试环境 @RunWith(MockitoJUnitRunner.class) Junit运行Mockito的运行环境,不会加载springboot上下文 @SpringBootTest 加载springbo

    2023年04月09日
    浏览(40)
  • Mockito单元测试基本使用

    本文参考: 【码农教程】手把手教你Mockito的使用 - 掘金 (juejin.cn) java - doReturn().when()与when().thenReturn() - 成长之路 - SegmentFault 思否 单元测试实践篇:Mock_阿里巴巴淘系技术团队官网博客的博客-CSDN博客 阿里是如何进行单元测试培训的?_Hollis Chuang的博客-CSDN博客 【Mockito】Mock

    2024年02月10日
    浏览(50)
  • 单元测试Mockito

    Mockito 1.为什么要mock? mock等于是创建一个虚拟对象(不会去跑真实的),在测试环境中替换掉真是对象,从而 验证该对象某些方法的调用情况,调用多少次,参数等 给对象做一个定义,指定返回结果或者特定的动作 2.什么是mock,stub和spy mock: Mock 对象是一种完全由测试控制

    2024年03月18日
    浏览(41)
  • 单元测试-mockito

    在单元测试中,对于一个类中的方法,常常需要依赖其他类的方法、操作数据dto等对象实例。 方法mock:依赖的方法又可能依赖其他方法,呈现级联的树状结构。 问题:在一些情况下,这个依赖树会很深,其中依赖的一个子方法一旦修改出现问题,如果引起大量的单测不可用

    2024年04月11日
    浏览(71)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包