摘要:寫在前面因個人能力有限,可能會出現理解錯誤的地方,歡迎指正和交流關于單元測試通常一個優秀的開源框架,一般都會有很完善的單元測試。
寫在前面
因個人能力有限,可能會出現理解錯誤的地方,歡迎指正和交流!
關于單元測試通常一個優秀的開源框架,一般都會有很完善的單元測試。
舉個例子:
不好意思,我調皮了 :)
Retrofit
googlesamples/android-architecture
在這兩個優秀的開源框架中,都非常注重單元測試的編寫,而且單元測試占的比例也很大,甚至在某些方面上,測試代碼會遠遠多于該框架本身的代碼。這里我們以android-architecture中的todoapp為例,看看它的測試代碼覆蓋率是多少:
恩,相當可觀的數據。至少對我而言.
至于如何查看測試代碼覆蓋率,方法很簡單,看圖操作:
第一步
第二步
第三步
![3.png](http://o8wshxdfk.bkt.clouddn.com/3.png)
Show Time
所以...
寫單元測試很重要.
寫單元測試很重要..
寫單元測試很重要..
Mockito接下來就讓我們開始使用Mockito進行單元測試吧
準備工作dependencies { testCompile "junit:junit:4.12" // 如果要使用Mockito,你需要添加此條依賴庫 testCompile "org.mockito:mockito-core:1.+" // 如果你要使用Mockito 用于 Android instrumentation tests,那么需要你添加以下三條依賴庫 androidTestCompile "org.mockito:mockito-core:1.+" androidTestCompile "com.google.dexmaker:dexmaker:1.2" androidTestCompile "com.google.dexmaker:dexmaker-mockito:1.2" }創建Mockito測試
在 Mockito 中你可以使用 mock() 方法來創建一個模擬對象,也可以使用注解的方式 @Mock 來創建 ,這里推薦使用注解。需要注意的是,如果是使用注解方式,需要在使用前進行初始化。這里有三種初始化方式:
1.使用 MockitoAnnotations.initMocks(this) 方式
public class MockitoAnnotationsTest { @Mock AccountData accountData; @Before public void setupAccountData(){ MockitoAnnotations.initMocks(this); } @Test public void testIsNotNull(){ assertNotNull(accountData); } }
2.使用 @RunWith(MockitoJUnitRunner.class) 方式
@RunWith(MockitoJUnitRunner.class) public class MockitoJUnitRunnerTest { @Mock AccountData accountData; @Test public void testIsNotNull(){ assertNotNull(accountData); } }
3.使用 MockitoRule 方式
public class MockitoRuleTest { @Mock AccountData accountData; @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); @Test public void testIsNotNull(){ assertNotNull(accountData); } }如何使用Mockito進行測試
這里我以AccountData類為例,進行一個簡單的對象模擬測試
public class AccountData { private boolean isLogin; private String userName; public boolean isLogin() { return isLogin; } public void setLogin(boolean login) { isLogin = login; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } }
假設現在你想對AccountData的mock對象進行模擬測試:
比如我希望 isLogin() 方法被調用時返回true,那么你可以這樣寫:
@Test public void testIsLogin(){ when(accountData.isLogin()).thenReturn(true); boolean isLogin=accountData.isLogin(); assertTrue(isLogin); }
如果你希望 getUserName() 被調用返回Jack
@Test public void testGetUserName(){ when(accountData.getUserName()).thenReturn("Jack"); assertEquals("Jack",accountData.getUserName()); }
如果你希望對 setUserName(String userName) 方法中參數進行測試
@Test public void testSetUserName(){ accountData.setUserName("wang"); verify(accountData).setUserName(Matchers.eq("wang")); }
如果你想統計 "isLogin()" 方法被調用的次數:
@Test public void testIsLoginTimes(){ accountData.isLogin(); accountData.isLogin(); verify(accountData,times(2)).isLogin(); }
又或者
verify(mock, never()).someMethod("never called"); verify(mock, atLeastOnce()).someMethod("called at least once"); verify(mock, atLeast(2)).someMethod("called at least twice"); verify(mock, times(5)).someMethod("called five times"); verify(mock, atMost(3)).someMethod("called at most 3 times");
......
是不是使用起來簡單明了。
那還等什么,趕緊Get起來吧,如果你想進一步了解,那就趕緊打開 Mockito 的官網吧。
相關鏈接文中代碼示例
Mockito Website
Mockito GitHub
Unit tests with Mockito - Tutorial
我是Jack Wang...
我的心愿是....
Google回歸.....
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64942.html
摘要:寫單元測試時,應該把這些依賴隔離,讓每個單元保持獨立。以上的各種原因,都會影響單元測試的結果。在單元測試的基礎上,將相關模塊組合成為子系統或系統進行測試,稱為集成測試。可以看到,單元測試速度比集成測試,也叫測試要快,并且開發成本也是最低。 showImg(/img/remote/1460000006811144); 原文鏈接:http://www.jianshu.com/p/bc996...
摘要:什么是單元測試單元測試是對程序的最小單元進行正確性檢驗的測試工作。編寫第一個單元測試單元測試主要使用是測試框架類庫的擴展庫,需要在中聲明測試依賴。目標代碼這里以一個簡單的中的例子來說明如何寫單元測試。TL;DR: 本文主要面向單元測試新手,首先簡單介紹了什么是單元測試,為什么要寫單元測試,討論了一下 Android 項目中哪些代碼適合做單元測試,并以一個簡單例子演示了如何編寫屬于你的第一個 ...
閱讀 635·2021-11-22 15:32
閱讀 2723·2021-11-19 09:40
閱讀 2318·2021-11-17 09:33
閱讀 1274·2021-11-15 11:36
閱讀 1870·2021-10-11 10:59
閱讀 1482·2019-08-29 16:41
閱讀 1785·2019-08-29 13:45
閱讀 2155·2019-08-26 13:36