在測試接口過程中,有時我們希望知道自己期望傳入的參數是什么,以此來判斷傳入參數的正確行,這時就需要用到EassyMock的capture方法.該方法能捕獲傳入的參數存放到自定義的變量中,然后用捕獲的參數與期望的參數進行對比,從而判斷調用接口時使用的參數是否正確.
下面用例子演示一下:
要測試的接口
package MockTestWithCapture;public interface Service { void handle(int arg, int[] array);}測試的類
package MockTestWithCapture;import static org.junit.Assert.*;import org.easymock.*;import org.junit.*;import static org.easymock.EasyMock.*;public class TestService { @Test public void test() { Service mockService = createMock("mockService", Service.class); //首先定義要用來存放捕獲參數的變量 Capture<Integer> capArg = new Capture<Integer>(); Capture<Object> capArray = new Capture<Object>();//Capture沒有對應數組的,所以只能用Object存放數組,之后在強制性轉換 //這里是重點,需要調用capture方法捕獲實際傳入的參數 //注意這里第一個參數必須用captureInt方法,不能用capture方法,否則因為傳入參數類型不匹配而報錯 mockService.handle(captureInt(capArg), (int[])capture(capArray)); // 下面的寫法也爭取// int a1 = captureInt(capArg);// int[] a2 = (int[])capture(capArray);// mockService.handle(a1, a2); replay(mockService); int arg = 100; int[] array = {1,2,3,4}; //實際調用接口傳入的參數是arg和array mockService.handle(arg, array); //捕獲實際傳入的參數 int actual1 = capArg.getValue(); int[] actual2= (int[])capArray.getValue(); //這里我們將捕獲的參數進行校驗 assertEquals(arg, actual1); assertArrayEquals(array, actual2); verify(mockService); }}新聞熱點
疑難解答