首页 > 其他分享 >Mockito教程(单测mock)

Mockito教程(单测mock)

时间:2024-08-27 14:37:35浏览次数:10  
标签:依赖 iterator Mockito next mock 单测 Mock

1 Mockito 介绍 [3]

1.1 Mockito是什么?

Mockito是mocking框架,它让你用简洁的API做测试。而且Mockito简单易学,它可读性强和验证语法简洁。

1.2 为什么需要Mock

测试驱动的开发( TDD)要求我们先写单元测试,再写实现代码。在写单元测试的过程中,我们往往会遇到要测试的类有很多依赖,这些依赖的类/对象/资源又有别的依赖,从而形成一个大的依赖树,要在单元测试的环境中完整地构建这样的依赖,是一件很困难的事情。如下图所示:

 

为了测试类A,我们需要Mock B类和C类(用虚拟对象来代替)如下图所示:

 

1.3 Stub和Mock异同[1]

  • 相同:Stub和Mock都是模拟外部依赖
  • 不同:Stub是完全模拟一个外部依赖, 而Mock还可以用来判断测试通过还是失败

2 使用Mockito [2][4]

2.1 验证行为

 1 @Test
 2     public void verify_behaviour(){
 3         //模拟创建一个List对象
 4         List mock = mock(List.class);
 5         //使用mock的对象
 6         mock.add(1);
 7         mock.clear();
 8         //验证add(1)和clear()行为是否发生
 9         verify(mock).add(1);
10         verify(mock).clear();
11     }

2.2 模拟我们所期望的结果

@Test
    public void when_thenReturn(){
        //mock一个Iterator类
        Iterator iterator = mock(Iterator.class);
        //预设当iterator调用next()时第一次返回hello,第n次都返回world
        when(iterator.next()).thenReturn("hello").thenReturn("world");
        //使用mock的对象
        String result = iterator.next() + " " + iterator.next() + " " + iterator.next();
        //验证结果
        assertEquals("hello world world",result);
    }


1 @Test(expected = IOException.class)
2     public void when_thenThrow() throws IOException {
3         OutputStream outputStream = mock(OutputStream.class);
4         OutputStreamWriter writer = new OutputStreamWriter(outputStream);
5         //预设当流关闭时抛出异常
6         doThrow(new IOException()).when(outputStream).close();
7         outputStream.close();
8     }

 

标签:依赖,iterator,Mockito,next,mock,单测,Mock
From: https://www.cnblogs.com/wxdlut/p/18382638

相关文章

  • 大白话单元测试之mock测试
    文章目录一、什么是Mock测试二、传统的单元测试JunitTest三、Mock测试(对比junit测试)四、Mock详解1.@InjectMocks和@Mock用法2.when用法3.verify用法五、Mock其他常用用法1.如何初始化数据2.初始化service类中的Apollo配置3.Assert.assertEquals用法一、什么是Mo......
  • C++ 构造函数/析构函数中调用虚函数的情况简单测试
    #include<string>#include<iostream>usingnamespacestd;namespace{classAnimal{public:Animal(){cout<<"基类调用虚函数…"<<endl;cout<<GetInfo()<<e......
  • 一起单测引起的项目加载失败惨案
    一、前言最近在开发一个功能模块时,在功能自测阶段,通过使用单测测试功能的完整性,在测试单测联通性使用到静态方法测试时,发现单测报错,通过查阅解决方案发现需要对Javaassist包进行排包或者升版本处理。通过排包解决掉单测报错,在部署项目时发现频繁报bean注入失败问题,最终定位发现......
  • go的github.com/prometheus如何在单测中校验值是否正确
    假如我的指标定义如下:MetricGroupStatGauge=prometheus.NewGaugeVec(prometheus.GaugeOpts{ Name:"test", Help:"test",},[]string{"name","age","sex"})...忽略对指标添加数据的代码那么如何取值进行校验呢?注意:GetMetricWithLabelValues(&......
  • 深入探究 Java 中的单元测试 Mock 技术
    在软件开发中,单元测试是确保代码质量和稳定性的重要手段。而Mock技术在单元测试中扮演着至关重要的角色,它能够帮助我们隔离外部依赖,更有效地对单个模块进行测试。本文将深入探讨Java中的单元测试Mock技术。一、单元测试与Mock技术概述单元测试是对软件中的最小可测试......
  • 对C工程使用GTest与Gmock函数未定义(undefined reference)排错记录
    在使用Gtest过程中出现了一些被测参数和函数未定义的问题调了三天很是头疼1、对象只申明未定义在配置文件中该结构体数组已经被定义完成,错误排除2、使用对象的错误定义(签名不匹配)  C++提供了函数重载,当函数的声明与调用时,输入参数与声明是不同时会报undefinedrefer......
  • 单元测试框架 powermock
    单元测试框架powermock  在pom.xml加入依赖包:<dependency><groupId>org.powermock</groupId><artifactId>powermock-api-mockito2</artifactId><version>${powermock.version}</version><scope>test</scope&......
  • To create a new mock, the existing static mock registration must be deregistered
    1、异常提示:Tocreateanewmock,theexistingstaticmockregistrationmustbederegistered  2、原因分析由提示信息可知,静态模拟已经注册过了,再次注册时必须先将之前的撤销。所以我们要撤销之前的注册信息,再执行。这里提供另一种方法,将模拟静态的方法......
  • 单元测试框架 mockito
    单元测试框架mockito 1、在项目的pom.xml引入 mockito的依赖:<dependency><groupId>org.mockito</groupId><artifactId>mockito-inline</artifactId><scope>test</scope></dependency>2、模拟Spring的消息源对象:@MockMes......
  • 在线带壳屏幕截图工具推荐:MockUPhone
    简介MockUPhone是一款免费的在线工具,用于生成带壳屏幕截图。这款工具主要面向开发者、设计师以及产品经理等人群,他们可以利用MockUPhone将UI设计或屏幕截图展示在各种不同类型的设备模型上,如智能手机、平板电脑、个人电脑、电视甚至是可穿戴设备。官网https://mockuphone.com/......