码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-05-08 09:57:19      阅读:684      评论:0      收藏:0      [点我收藏+]

标签:开发   bottom   需要   lan   例子   :link   exception   test   反馈   

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

       Inline mock maker的奇妙之处在于它实现了Mockito对字节码产生的有效支持,这种支持通过类InlineByteBuddyMockMake来实现InlineByteBuddyMockMake类中,定义了一个 IncubatingAnnotation@Incubating,这个注释的含义是说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>

 

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

标签:开发   bottom   需要   lan   例子   :link   exception   test   反馈   

原文地址:http://www.cnblogs.com/yanlongpankow/p/6823223.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!