单元测试Mockito

本文介绍了Mockito在软件测试中的角色,包括mock对象的创建、配置(stubbing)、使用以及如何通过Mockito注解如@Mock和@InjectMocks进行对象注入。还涵盖了验证和断言方法,以及在实际开发环境中的依赖管理和使用流程。
摘要由CSDN通过智能技术生成
  • Mockito

    • 1.为什么要mock?

      mock等于是创建一个虚拟对象(不会去跑真实的),在测试环境中替换掉真是对象,从而

      • 验证该对象某些方法的调用情况,调用多少次,参数等
      • 给对象做一个定义,指定返回结果或者特定的动作
    • 2.什么是mock,stub和spy

      
      List list = new LinkedList();
      List spy = spy(list);
      
      • mock: Mock 对象是一种完全由测试控制的对象,它模拟了真实对象的行为。Mock 对象通常用于隔离要测试的代码,从而不依赖于外部系统或操作。在 Mockito 中,mock 对象不会保留任何状态,调用未配置的方法通常会返回默认值。
      • stub: Stub 是一种模拟对象,用于为测试提供预定义的响应。Stubbing 指的是设置模拟对象的行为,即当调用某个方法时返回特定的响应。在 Mockito 中,stubbing 是通过 when().thenReturn() 这样的链式调用完成的。
      • spy: Spy 是 Mockito 中的一个功能,它允许你创建一个对象的包装器,这个包装器对于大多数方法调用都是透明的,但是你可以监视或更改某些特定方法的行为。Spy 通常用于部分模拟真实对象的行为。
    • 3.基本的操作:

      • Mock()方法可以用来mock一个对象或者一个接口。当我们不对行为进行具体定义的时候,就会一直是默认值
        • e.g: Random random = Mockito.mock(Random.class, “Test”);
        • e,g: random.nextInt()会一直都是0
        • 验证和断言
          • Verify()验证对象是否发生过某些行为。
            • e.g: Verify(mock).someMethod(..);
          • 断言:Assertions,即assertequals/null/notnull/true等
            • assertEquals(expected,actual);
          • 当使用mock对象时,如果不对其行为进行定义则会返回默认值。在这里对行为进行定义我们称为打桩,即给Mock对象打桩
            • when(method).thenReturn(…)当执行某个方法时,返回某个值
            • when(method).thenThrow(…)当执行某个方法时,抛出异常
    • 4.mock注解:

      • @Mock:
        • 通过这个注释的对象或者接口等同于mock()方法创建
        • 但是需要配合MockitoAnnotation.openMocks(this)去使用
      • @InjectMocks (和mock的区别)
        • injectmocks是mockito框架中的一个功能,它可以用来自动注入mock对象到被测试对象中。它的作用是将mock对象注入到被测试对象的构造函数或属性中,以便在测试中使用。
        • injectMocks用于集成测试,它可以将mock对象注入到被测试的类或方法中,以测试整个系统的正确性和可靠性。InjectMocks可以进行自动注入,将需要被mock的对象注入到被测试的对象中,从而提高测试的效率和精度
        • injectmocks主要是将Mock对象注入到被测试类中,以便测试某些功能
      • @BeforeEach:会在执行测试前执行
        • 一般会设置setup()即测试前的准备
      • @AfterEach:会在执行测试后执行
        • 可以设置after()方法
      • @Spy和Spy
        • 被Spy的对象会走真实的方法,而mock不会
        • Spy()方法的参数是对象实例,而mock参数是class
    • 5.mockito的流程

      1. 添加依赖: 在 Maven 或 Gradle 项目中,首先需要添加 Mockito 的依赖。

        Maven 示例:

        
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <version>4.x.x</version>
            <scope>test</scope>
        </dependency>
        
        
      2. 创建模拟对象: 使用 Mockito 提供的 mock 方法创建一个模拟对象。

        
        List mockedList = mock(List.class);
        
        
      3. 配置模拟对象(Stubbing): 配置模拟对象的行为,即当调用特定方法时应该返回什么值。

        
        when(mockedList.get(0)).thenReturn("First Element");
        
        
      4. 使用模拟对象: 在测试中使用模拟对象。

        
        String element = mockedList.get(0);
        
        
      5. 验证交互: 验证模拟对象上是否进行了预期的交互。

        
        verify(mockedList).get(0);
        

  • 23
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值