单元测试Mockito

这篇具有很好参考价值的文章主要介绍了单元测试Mockito。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • 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. 验证交互: 验证模拟对象上是否进行了预期的交互。文章来源地址https://www.toymoban.com/news/detail-841272.html

        
        verify(mockedList).get(0);
        

到了这里,关于单元测试Mockito的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Mockito单元测试异常情况

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

    2024年02月07日
    浏览(48)
  • 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日
    浏览(39)
  • 【单元测试】Mockito使用详解

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

    2024年04月15日
    浏览(84)
  • Java单元测试之Mockito

    Mockito是一种Java Mock框架,主要就是用来做Mock测试的,它可以模拟任何Spring管理的Bean、模拟方法的返回值、模拟抛出异常等等,同时也会记录调用这些模拟方法的参数、调用顺序,从而可以校验出这个Mock对象是否有被正确的顺序调用,以及按照期望的参数被调用。 Mockito的特

    2024年02月13日
    浏览(49)
  • 【SpringBoot】mockito+junit 单元测试

    CommonServiceImpl 在方法 getSourceCodeMap() 调用了 ServiceA 的方法 list(QueryBO queryBo) 。 org.mockito.exceptions.base.MockitoException: No tests found in ClientSyncServiceImplTest Is the method annotated with @Test? Is the method public? 解决方案: Test引入 org.junit.Test 不要引入 org.junit.jupiter.api.Test 例如获取当前用户 moc

    2024年02月09日
    浏览(42)
  • 单元测试之- mock工具mockito

     常用的mock工具mockito 在编写单元测试时,需要mock依赖的对象,减少依赖对象对测试的影响,Mocktio是常用的mock工具之一,那么mockito提供了哪些功能呢? Mock对象的创建和配置:Mockito可以通过简单的语法创建mock对象,并允许你配置mock对象的行为。 Mock对象的验证:Mockito提供

    2024年02月13日
    浏览(39)
  • 单元测试(mock) 错误org.mockito.Mockito.framework()Lorg/mockito/MockitoFramework;解析

      如果您觉得有用的话,记得给 博主点个赞,评论,收藏一键三连啊 ,写作不易啊^ _ ^。   而且听说 点赞的人每天的运气都不会太差 ,实在白嫖的话,那欢迎常来啊!!! 01 准备 01::01 安装maven dependency helper插件和maven helper插件 用来分析你的依赖 打开idea 选择 File - Settin

    2023年04月08日
    浏览(35)
  • Java单元测试浅析(JUnit+Mockito)

    Java测试我们应该都遇到过,一般我们会被要求做单元测试,来验证我们代码的功能以及效率。 这里来和大家一起探讨下有关单于测试。 是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单

    2024年02月06日
    浏览(60)
  • JUnit 5单元测试(三)—— Mockito 模拟

    上一篇讲了 JUnit 5单元测试(二)—— 断言,书接上文开始 JUnit 5单元测试(三)—— Mockito 模拟 想象下面这几种情况你该怎么单元测试: 1.A方法去数据库查询了数据进行了一些处理,该怎么单元测试; 2.在微服务项目中,A方法中调用了远程微服务B方法(或者B方法还没写好

    2024年02月15日
    浏览(51)
  • Junit5+Mockito单元测试详解

    1.宏观层面:AIR原则 A:Automatic(自动化) 全自动执行,输出结果无需人工检查,而是通过断言验证。 I:Independent(独立性) 分层测试,各层之间不相互依赖。 R:Repeatable(可重复) 可重复执行,不受外部环境( 网络、服务、中间件等)影响。 2.微观层面:BCDE原则 B: Bord

    2024年01月17日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包