mock详细教程入门这一篇就够了

本文详细介绍了Mock测试的概念、目的、适用场景和代码实例,包括如何进行Mock静态方法的测试,以及提升测试覆盖率的策略。通过分析业务代码,演示了如何编写测试用例以达到100%的测试覆盖率,强调了测试顺序对覆盖完整性的关键作用。
摘要由CSDN通过智能技术生成

目录

1、什么是mock测试

2、为什么要进行Mock测试

3、Mock适用场景

4、代码实例

 5、参数方法说明

6、简单测试

 7、测试方法说明

8、Mock静态方法

9、提升测试覆盖率


 

1、什么是mock测试

        Mock 测试就是在测试活动中,对于某些不容易构造或者不容易获取的比较复杂的数据/场景,用一个虚拟的对象(Mock对象)来创建用于测试的测试方法。

2、为什么要进行Mock测试

        Mock是为了解决不同的单元之间由于耦合而难于开发、测试的问题。所以,Mock既能出现在单元测试中,也会出现在集成测试、系统测试过程中。

        Mock 最大的功能是帮你把单元测试的耦合分解开,如果你的代码对另一个类或者接口有依赖,它能够帮你模拟这些依赖,并帮你验证所调用的依赖的行为。

3、Mock适用场景

1. 需要将当前被测单元和其依赖模块独立开来,构造一个独立的测试环境,不关注被测单元的依赖对象,只关注被测单元的功能逻辑。

2. 被测单元依赖的模块尚未开发完成,而被测单元需要依赖模块的返回值进行后续处理。

3、前后端项目中,后端接口开发完成之前,接口联调

4、 依赖的上游项目的接口尚未开发完成,需要接口联调测试

5、被测单元依赖的对象较难模拟或者构造比较复杂

如: 支付业务的异常条件很多,但是模拟这种异常条件很复杂或者无法模拟.

4、代码实例

        1、新建测试工程

package com.echo.mockito;


public class demo {

    //新建一个测试方法
    public int add(int a,  int b){
        return a + b;
    }
}

2、构建mock测试方法

       (1)、选中测试类,右键选中generate
 
   (2)、点击test

  (2)、点击ok后就会在test目录下生成对应的测试方法,和真实的目录是对应的

 5、参数方法说明

@BeforeEach 
    用在测试前准备,测试前会构建很多的环境配置或者基础配置,都可以在这里设置。
@AfterEach  
    用于测试后设置。
@Mock 
    注解可以理解为对 mock 方法的一个替代,不会走真实的方法,模拟真实方法的行为。使用该注解时,要使用MockitoAnnotations.openMocks(this)  方法,让注解生效。
@Spy
    1、被Spy的对象会走真实的方法,而mock对象不会,
    2、spy方法的参数是对象实例,mock的参数是class。
@InjectMocks 
       用于将@Mock标记的模拟变量注入到测试类中。
MockitoAnnotations.openMocks(this) 
   开启mock,配合以上两个注解进行测试。一般放在@BeforeEach 中,在测试前开启,这样不用在每个方法中都的开启了。
Mockito.when(demo.add(1,2)).thenReturn(3):打桩
    mock核心,可以设置要测试的方法的结果,这样就会忽略真实方法的执行结果,后续的测试都是基于打桩结果执行。
Mockito.when(demo.add(1,2)).thenThrow(new RuntimeException());
    用于模拟异常。
Assertions.assertEquals(3,demo.add(1,2)):断言
    测试的主要方式,结果基于此判断。(期望值,实际值)。

6、简单测试

           1、打桩测试  设置方法返回4  ,而实际执行为3 ,测试不通过。

    

  • 32
    点赞
  • 272
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值