Mockito
Posted by Bruce Tsai
05/27/2016
Mockito 是一個針對 Java 的單元測試模擬框架,它與 EasyMock 和 jMock 很相似,都是為了簡化單元測試過程中測試上下文 ( 或者稱之為測試驅動函數以及樁函數 ) 的搭建而開發的工具。在有這些模擬框架之前,為了編寫某一個函數的單元測試,程序員必須進行十分繁瑣的初始化工作,以保證被測試函數中使用到的環境變量以及其他模塊的接口能返回預期的值,有些時候為了單元測試的可行性,甚至需要犧牲被測代碼本身的結構。單元測試模擬框架則極大的簡化了單元測試的編寫過程:在被測試代碼需要調用某些接口的時候,直接模擬一個假的接口,並任意指定該接口的行為。這樣就可以大大的提高單元測試的效率以及單元測試代碼的可讀性。
範例
@Test
public void test1() {
// create mock
MyClass test = Mockito.mock(MyClass.class);
// define return value for method getUniqueId()
when(test.getUniqueId()).thenReturn(43);
// use mock in test....
assertEquals(test.getUniqueId(), 43);
}
// Demonstrates the return of multiple values
@Test
public void testMoreThanOneReturnValue() {
Iterator i= mock(Iterator.class);
when(i.next()).thenReturn("Mockito").thenReturn("rocks");
String result=i.next()+" "+i.next();
//assert
assertEquals("Mockito rocks", result);
}
// this test demonstrates how to return values based on the input
@Test
public void testReturnValueDependentOnMethodParameter() {
Comparable c= mock(Comparable.class);
when(c.compareTo("Mockito")).thenReturn(1);
when(c.compareTo("Eclipse")).thenReturn(2);
//assert
assertEquals(1,c.compareTo("Mockito"));
}
// this test demonstrates how to return values independent of the input value
@Test
public void testReturnValueInDependentOnMethodParameter() {
Comparable c= mock(Comparable.class);
when(c.compareTo(anyInt())).thenReturn(-1);
//assert
assertEquals(-1 ,c.compareTo(9));
}
// return a value based on the type of the provide parameter
@Test
public void testReturnValueInDependentOnMethodParameter() {
Comparable c= mock(Comparable.class);
when(c.compareTo(isA(Todo.class))).thenReturn(0);
//assert
Todo todo = new Todo(5);
assertEquals(todo ,c.compareTo(new Todo(1)));
}