Mockito对final类型和方法的支持(二):为什么在版本2.1之后支持final类型和方法及使用限制

p { margin-bottom: 0.1in; line-height: 120% }
a:link { }

在第一部分中我们讲到Mockito使用cglib子类化来实现mocking,从而无法支持 mocking final 类型和方法。为了改变这种状况,Rafael Winterhalter在Mockito 2.1.0版本里创建了第二种 mock方法叫Inline mock maker。

p { margin-bottom: 0.1in; line-height: 120% }
code.cjk { font-family: "Droid Sans Fallback", monospace }
a:link { }

Inline mock maker的奇妙之处在于它实现了Mockito对字节码产生的有效支持,这种支持通过类InlineByteBuddyMockMake来实现InlineByteBuddyMockMake类中,定义了一个 Incubating[email protected],这个注释的含义是说InlineByteBuddyMockMake是新创建的类,Mockito开发者还在等待社区使用者的反馈信息. 不仅如此,这个新功能现在还是可选的.也就是说当前缺省情况下,功能是关闭的。为何如此呢,因为它基于完全不同的mocking机制,需要使用者更多的反馈.我们想要使用它来Mocking final 类型和方法时,可以通过 mockito extension mechanism来激活它。具体操作只有在配置文件src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker里加入mock-maker-inline这个值就可以了。

当激活lnline mock maker之后,我们可以测试如下的例子:

public final class Need {
    public final int getNeed() {
        return 4;
    }
}

测试类:

import org.junit.Test;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.junit.Assert.*;

public class NeedTest {
    @Test
    public void testNeed() throws Exception {
        Need need=mock(Need.class);
        when(need.getNeed()).thenReturn(4);
    }
}

POM的依赖性,注意版本要对应:

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-core</artifactId>
    <version>2.2.0-beta.1</version>
</dependency>

<!-- https://mvnrepository.com/artifact/net.bytebuddy/byte-buddy -->
<dependency>
    <groupId>net.bytebuddy</groupId>
    <artifactId>byte-buddy</artifactId>
    <version>1.4.26</version>
</dependency>
时间: 2024-10-16 06:24:26

Mockito对final类型和方法的支持(二):为什么在版本2.1之后支持final类型和方法及使用限制的相关文章

iOS 32位、 64位系统兼容性设置-Xcode创建支持IOS4.3以上版本的应用的方法

方法一: 如果是Xcode 5的话步骤为 点击项目名称->Build Settings->搜索 Architectures 这个里面的原始的值是Standard architectures(armv7,armv7s,arm64) 点击这个值,在下拉列表框中选择 Standard architectures(armv7,armv7s) ,然后保存项目,转到 General里面去就可以看到项目的Target选项里面会从4.3到7.0都有. 如果是Xcode 5.1的话步骤为 点击项目名称->

jquery 1.9版本后不在支持browser 方法的解决方案

今天对jquery 进行升级,导致项目出错,原来在1.9版本之后 jquery 不支持browser 方法了.  官方建议的又不好用,所以我所jquery 原来的代码摘除来,又扩展回去. //解决jquery 1.9版本之后不支持 browser 这里进行了扩展 var a, b; $.uaMatch = function (a) { a = a.toLowerCase(); var b = /(chrome)[ \/]([\w.]+)/.exec(a) || /(webkit)[ \/]([\

配置NGINX支持中文URL 中文文件名或目录404无法访问的解决方法

Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置.不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的.但是除非这两只青蛙在同一时间跳到同一点上,不然是永远都不可能碰面的.为了帮助这两只乐观的青蛙,你被要求写一个程序来判断这两只青蛙是否能够碰面,会在什么时候碰面. 我们把这

扩展方法(为那些已经写好不能修改源码的类添加方法)

参考:https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/classes-and-structs/how-to-implement-and-call-a-custom-extension-method 本主题介绍如何实现 .NET Framework 类库 中任意类型的扩展方法,或是你想要扩展的任何其他 .NET 类型. 客户端代码可以通过以下方法使用扩展方法,添加包含这些扩展方法的 DLL 的引用,以及添加 usin

POI 读取 Excel 转 HTML 支持 03xls 和 07xlsx 版本 包含样式

工作需求: 提供EXCEL模板上传后预览:EXCEL解析成终端风格HTML. 处理方案: POI解析EXCEL,预览时尽量获取原有表格的样式:终端使用EXCEL解析的无样式HTML,然后通过jQuery添加CSS样式 遇到问题: CSDN上大牛处理03版xls格式的有成功例子:但是07版xlsx格式的样式处理未找到理想中的例子 下文是参考大牛的例子整理后的程序 供参考! EXCEL表格07xlsx格式 通过POI解析带样式的效果 项目JAR文件注意版本 JAVA 1 package com.hb

php如何实现图片点击下载,并保存本地?-----本例子为二维码的生成图片,并支持点击下载

### 今天因为工作需要,完成了一个二维码的生成图片,并支持点击下载的 ### 控制器文件,相关代码 1 // 生成二维码 2 $url = action('Apih5\\[email protected]', ['provider' => $request->channel]); 3 // 保存二维码到本地,并返回二维码 4 $qrcode = $this->app['version']->qrcode($url); 5 $dir_path = '../public/static

编写高质量JS代码的68个有效方法(十二)

No.56.避免不必要的状态 Tips: 尽可能地使用无状态的API 如果API是有状态的,标示出每个操作与哪些状态有关联 无状态的API简洁,更容易学习和使用,也不需要考虑其他的状态.如: 'test'.toUpperCase(); // 'TEST' 有状态的API往往会导致额外的声明,并增加复杂度. No.57.使用结构类型设计灵活的接口 Tips: 使用结构类型(也称为鸭子类型)来设计灵活的对象接口 结构接口更灵活.更轻量,所以应该避免使用继承 针对单元测试,使用mock对象即接口的替代

win2008 iis7/iis7.5下最简单最强安装多版本PHP支持环境,以及解决主机宝php版本过低问题 支持不同网站不同php版本

利用PHP Manager,windows 2008 R2 IIS7.5安装多版本PHP环境 个人对在windows 2008 R2上,在iis环境中配置安装php环境实践中的注意点: 1.如需要在服务器上配置mysql的话,在配置php环境前先安装mysql.(根据自己的需求,下载相应的mysql版本) mysql安装配置步骤请查看:http://www.jb51.net/article/39188.htm sqlserver 2008安装:http://www.jb51.net/articl

STL之Vector方法介绍(二)

如何拼接两个vector 在C++中很多功能不像Python中那么方便,比如说要拼接两个vector,在C++中就需要自己实现.但是vector有一个非常好的函数可以简便的实现该功能,那就是insert函数. #include <iostream> #include <vector> using namespace std; vector<int> combine(vector<int> &a, vector<int> &b) {