前言
工作中测试框架使用的是Mockito,在网上看到很多人将其与EasyMock还有JMock进行比较,突出其简易和方便的特点。我的确觉得Mockito很方便而且使用简单,但是我没有用过EasyMock和JMock,所以主要来跟大家分享下我在工作中对于Mockito的认识。
正题
简介
Mockito是一个针对Java的mocking框架。相信大家都知道单元测试,所谓单元测试,就是需要突出其单元的特点即独立性。比如我们的一个Service类,里面肯定会调用一些Dao类。如果我们直接去测试Service的话就会去调用真实的Dao从而会连接数据库,这么一来只要dao失败了,Service肯定也会跟着失败,因为他们是耦合的,这是一个集成测试而不是单元测试。
Mockito这种框架的出现就是解决这个耦合问题,它可以Mock一个dao类,也就是我们不需要真正调用dao的方法,默认dao的方法都是成功的只需要根据我们的需求返回我们需要的值就Ok,这样我们就可以把焦点放到Service类里面的逻辑测试上面,从而实现了“单元”测试。
初识Mockito
开始之前可以先去官网http://mockito.org/ or https://code.google.com/p/mockito/downloads/list下载Mockito的jar包。
引入Mockito
我们在使用Mockito之前先引入Mockito的类,由于它的方法都是static的,所以我们可以直接引入static的方法,这样在使用的时候就不用加上类名了,但是对于初用者我建议使用非static的,因为对其方法还不是很熟,加上类名方便熟悉其个方法。
import org.mockito.Mockito.*; 或者import static org.mockito.Mockito.*;
我们现根据Mockito的特点举出几个简单的示例:
import static org.mockito.Mockito.*; import java.util.List; import org.junit.Test; public class TestMockito { @Test public void testMockito1() { // mock creation List mockedList = mock(List.class); // using mock object when(mockedList.get( 0 )).thenReturn( "first" ); mockedList.add("one"); mockedList.clear(); // 下面会输出“first”,因为前面设定了期望值 System.out.println(mockedList.get(0)); // 验证add方法是否在前面被调用了一次,且参数为“one”。clear方法同样。 verify(mockedList).add("one"); verify(mockedList).clear(); } }
小结:
本篇只是让大家对Mockito有个初步的认识,后续我会介绍Mockito各个方法的使用以及我在工作中的应用。