前言
工作中測試框架使用的是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各個方法的使用以及我在工作中的應用。