Java测试框架Mockito源码分析

本文详细分析了Mockito测试框架的设计思想和实现原理,解释了Mockito如何利用Proxy模式创建Mock对象,以及如何通过Mockito的API设置Mock对象的行为。文章通过实例展示了Mockito的使用方式,探讨了其违反传统设计原则但又能实现良好效果的原因。
摘要由CSDN通过智能技术生成

1.Mockito简介

测试驱动的开发(Test Driven Design, TDD)要求我们先写单元测试,再写实现代码。在写单元测试的过程中,一个很普遍的问题是,要测试的类会有很多依赖,这些依赖的类/对象/资源又会有别的依赖,从而形成一个大的依赖树,要在单元测试的环境中完整地构建这样的依赖,是一件很困难的事情。
所幸,我们有一个应对这个问题的办法:Mock。简单地说就是对测试的类所依赖的其他类和对象,进行mock - 构建它们的一个假的对象,定义这些假对象上的行为,然后提供给被测试对象使用。被测试对象像使用真的对象一样使用它们。用这种方式,我们可以把测试的目标限定于被测试对象本身,就如同在被测试对象周围做了一个划断,形成了一个尽量小的被测试目标。Mock的框架有很多,最为知名的一个是Mockito,这是一个开源项目,使用广泛。官网:http://site.mockito.org/

2.Mockito框架设计

首先我们要知道,Mock对象这件事情,本质上是一个Proxy模式的应用。Proxy模式说的是,在一个真实对象前面,提供一个proxy对象,所有对真实对象的调用,都先经过proxy对象,然后由proxy对象根据情况,决定相应的处理,它可以直接做一个自己的处理,也可以再调用真实对象对应的方法。示例:

代码中的注释描述了代码的逻辑:先创建mock对象,然后设置mock对象上的方法get,指定当get方法被调用,并且参数为0的时候,返回”one”;然后,调用被测试方法(被测试方法会调用mock对象的get方法);最后进行验证。逻辑很好理解,但是初次看到这个代码的人,会觉得有点儿奇怪,总感觉这个代码跟一般的代码不太一样。让我们仔细想想看,下面这个代码:

// 设置mock对象的行为 - 当调用其get方法获取第0个元素时,返回”one”
Mockito.when(mockedList.get(0)).thenReturn(“one”);

public class MockDemo {
    // 创建mock对象
    List<String> mockedList = Mockito.mock(List.class);

    @Before
    public void setUp(){
        // 设置mock对象的行为 - 当调用其get方法获取第0个元素时,返回"one"
        Mockito.when(mockedList.get(0)).thenReturn("one");
    }

    @Test
    public void mockDemoTest(){
        // 使用mock对象 - 会返回前面设置好的值"one",即便列表实际上是空的
        String str = mockedList.get(0);

        Assert.assertTrue("one".equals(str));
        Asser
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值