使用Mockito进行Java单元测试
Google在3月份推出了一個關于Android MVP架構的官方Sample,除MVP架構本身之外,在這個Sample中配備了完善的單元測試用例,這對學習如何在Android中進行單元測試具有極高的價值。這篇文章主要是對其中使用的Mock框架-Mockito的學習總結。
什么是Mock?
Mock是虛擬對象,是為了模擬真實對象而創建的,這些虛擬對象的行為是可控的。為方便理解,可以把Mock視為『汽車碰撞實驗』中的『假人』。
真實軟件架構
測試軟件架構
為什么需要Mock?
真實軟件架構中的對象行為是不確定的(eg:時間、對象的狀態)
真實對象的一些狀態又很難構造(eg:網絡抖動)
真實對象在進行某種操作時需要很長時間,影響測試進度(eg:一些數據庫的初始化)
TDD(測試驅動開發)要求先寫測試代碼,再進行開發,那么經常會出現真實對象還沒有開發完成的現象,又或者真實對象是一個硬件,只能模擬
實際測試中需要關注真實對象如何被調用,真實對象內部狀態如何
上述的問題都是可以通過引入Mock來解決的。
什么是Mockito?
Mockito是用于Java單元測試的一個Mock框架。
為什么選擇Mockito?
Mockito是StackOverflow社區票選的最佳Java Mock框架
Github 中位于Top4的Library
3.使用簡潔、優雅的API即可寫出漂亮的單元測試用例,這些單元測試語法符合自然語言,方便閱讀
Android Studio中如何配置使用Mockito?
android studio默認的構建工具是gradle,只需要在對應的build.grade中添加Mockito依賴即可。
repositories { jcenter() }dependencies { testCompile "org.mockito:mockito-core:1.+" }
Mockito可以完成哪些功能?
Mockito常用API及使用方法
- 使用mock函數 - public static <T> T mock(Class<T> classToMock)
- 使用@Mock注釋 - 但必須在@Test函數中初始化或使用內建的Junit Runner
verify(mock, times(5)).someMethod("was called five times");
verify(mock, atLeast(2)).someMethod("was called at least two times");
verify(mock, atLeastOnce()).someMethod(anyString());
when(methodCall).thenReturn() 或 when(methodCall).thenThrow()
doThrow(new RuntimeException()).when(mockObject).methodCall();
when(mockedObject.methodCall(anyInt())).thenReturn("element")when(mockedObject.contains(argThat(isValid())).thenReturn("element");//isValid()是自定義的參數匹配
personDAL.add(any());personDAL.getAll();InOrder inOrder = inOrder(personDAL);inOrder.verify(personDAL).add(any());inOrder.verify(personDAL).getAll();
ArgumentCaptor<Person> argument = ArgumentCaptor.forClass(Person.class);verify(mock).doSomething(argument.capture());assertEquals("John", argument.getValue().getName());
關于Mockito會繼續根據實際項目進一步整理實踐知識。
文/桃子媽咪(簡書作者)
原文鏈接:http://www.jianshu.com/p/3d6f76df21f9
著作權歸作者所有,轉載請聯系作者獲得授權,并標注“簡書作者”。
總結
以上是生活随笔為你收集整理的使用Mockito进行Java单元测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 说说初用 Mock 工具测试碰到的坑
- 下一篇: java的mock测试框架