使用Mockito模拟Static静态方法

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

前言

Mockito3.4.0版本之后增加了对Static方法的支持,在这里简单记录下Mockito.mockStatic方法的用法

测试代码

这是待测试的方法,用到了TestUtil.getString这个静态方法,将使用Mockito改变他的返回值

public class TestTarget {
	public boolean isEqual(String source) {
		String target = TestUtil.getString(source);
		System.out.println("target is:" + target);
		return source.equals(target);
	}
}

测试方法使用到的静态方法
他返回字符串本身,我们将通过Mockito改变他的返回值

	public static String getString(String s) {
		return s;
	}

Junit测试代码,执行isEqual方法TestUtil.getString(source)返回了target而不是source,最后return false

	@Test
	public void testisEqual() {
		TestTarget testTarget = new TestTarget();
		//方法的输入为source
		String source = "source";
		//通过Mockito模拟对象
        try (MockedStatic<TestUtil> mb = Mockito
                .mockStatic(TestUtil.class)) {
             //模拟带参数的静态方法的返回值
             //方法应该返回输入的source本身,此处通过mockito返回了target
            mb.when(()->TestUtil.getString(source)).thenReturn("target");
    		boolean isEqual = testTarget.isEqual(source);
    		assertFalse(isEqual);
        }
        	}

总结

带参数的静态方法的Mocktio.mockStatic使用方法

    try (MockedStatic<需要模拟的静态方法的类名> mb = Mockito
            .mockStatic(需要模拟的静态方法的类名)) {
        mb.when(()->需要模拟的静态方法的类名.方法名(参数)).thenReturn(返回值);
        //注意:调用待测试方法的时候一定要在try里面写
    }

无参数的静态方法

    try (MockedStatic<需要模拟的静态方法的类名> mb = Mockito
            .mockStatic(需要模拟的静态方法的类名)) {
        mb.when(需要模拟的静态方法的类名::方法名).thenReturn(返回值);
        //注意:调用待测试方法的时候一定要在try里面写
    }

常见的错误:
org.mockito.exceptions.base.MockitoException:
The used MockMaker SubclassByteBuddyMockMaker does not support the creation of static mocks

Mockito’s inline mock maker supports static mocks based on the Instrumentation API.
You can simply enable this mock mode, by placing the ‘mockito-inline’ artifact where you are currently using ‘mockito-core’.

出现该错误是缺少mockito-inline
在pom.xml中引入即可文章来源地址https://www.toymoban.com/news/detail-781661.html

<dependency>
	<groupId>org.mockito</groupId>
	<artifactId>mockito-inline</artifactId>
	<version>4.5.1</version>
	<scope>test</scope>
</dependency>

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

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

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

相关文章

  • 【Java应用】使用Mockito进行模拟和测试桩

    Mockito是一个流行的Java模拟框架,用于编写单元测试代码时模拟(mock)和测试桩(stub)对象的行为。可轻松模拟Java类和接口的行为,帮助测试人员和开发人员更好地设计和执行单元测试。 使用Mockito,开发人员可以模拟一个对象,使其表现出某些预期的行为,而无需使用真实

    2024年02月11日
    浏览(27)
  • spring boot 单元测试JUnit5使用Mockito模拟Mock数据调用

    spring boot 单元测试JUnit5使用Mockito模拟Mock数据调用 好大一批新用法,大家静下心来好好看看吧 1. spring boot 使用 Mockito.when().thenReturn()模拟返回值 Mockito 是一种 Java mock 框架,他主要就是用来做 mock 测试的,他可以模拟任何 Spring 管理的 bean、模拟方法的返回值、模拟抛出异常…

    2024年02月15日
    浏览(41)
  • Mockito 之 verify 使用方法

    这里以 AlphaService、BetaService 为例,将 BetaService 作为单元测试的目标类。 各场景下 verify 的使用: 校验 BetaService.sayHello 中是否调用了 AlphaService.init 校验 BetaService.sayHello 中调用了 AlphaService.init 的次数 其实,这里 verify(alphaService, times(1)).init() 等同于 verify(alphaService).init() 。让我

    2024年02月02日
    浏览(16)
  • Mockito 调用模拟对象全解析

    一个人最大的缺点,不是自私、多情、野蛮、任性,而是偏执地爱一个不爱自己的人 Spring Boot框架来编写一个简单的示例,演示如何使用DI框架在单元测试中使用Mock实现,避免对外部环境的依赖。 首先,我们创建一个UserService接口,定义了一个getUserById方法用于查询用户信息

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

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

    2024年02月15日
    浏览(38)
  • Junit + Mockito 测试回调(callback) 方法

    语言:Java JDK: Java8 及以上。 Java8推出函数式接口后,就经常使用此特性开发。 在使用Junit + Mockito 时遇到有回调(callback)的函数方法时,遇到几种情况,这里进行记录。 对于Mockito中打桩个人理解:测试的方法在正常环境需要引入其他类中的方法来 支撑(实) ,但是在

    2024年01月17日
    浏览(32)
  • 一文浅谈Mockito使用

    • 一旦mock对象被创建了,mock对象会记住所有的交互,然后你就可以选择性的验证你感兴趣的交互,验证不通过则抛出异常。 • 默认情况下,所有的函数都有返回值。mock函数默认返回的是null,一个空的集合或者一个被对象类型包装的内置类型,例如0、false对应的对象类型为

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

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

    2024年04月15日
    浏览(75)
  • Mock&Mockito使用手册

    mock  测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。这个虚拟的对象就是mock对象。mock对象就是真实对象在调试期间的代替品; Mock 对象 :模拟对象的概念就是我们想要创建一个可以替代实际对象的对象,

    2024年02月11日
    浏览(26)
  • Mockito单元测试基本使用

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

    2024年02月10日
    浏览(35)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包