在 Android 中使用 Mockito 進行單元測試

言鼎科技 2023-06-08 385

如今移動應(yīng)用程序的功能越來越復(fù)雜,規(guī)模越來越大,這就是為什么編寫測試用例對于改進代碼并確保每個模塊正常工作非常重要(我知道它在移動開發(fā)人員社區(qū)中經(jīng)常被低估,有時甚至完全被忽視?。?。要編寫可高效進行單元測試的代碼,我們應(yīng)該使用最合適的架構(gòu),如 MVP 或 MVVM,它們將松散耦合到 Android 活動/片段/適配器中。

開發(fā)人員應(yīng)考慮在其測試套件中添加三種不同的測試:
1. UI 測試:這些測試用于斷言應(yīng)用程序 UI。使用濃縮咖啡。

2. Instrumented Tests:當(dāng)我們想要驗證按鈕點擊等用戶操作時,這些測試在 Android 設(shè)備上運行,無論是物理設(shè)備還是模擬設(shè)備,都利用 Android 框架提供的 API。AndroidX Test & Espresso 也廣泛用于此目的。

3.單元測試:單元測試對于測試應(yīng)用程序中的每個功能和過程更為重要。對于單元測試,最常用的工具是 JUnit、Mockito 或 Hamcrest。

單元測試的主要目標(biāo)是通過驗證代碼的正確性在開發(fā)周期的早期修復(fù)錯誤。在本教程中,我們將了解什么是 Mockito 以及在 Android 應(yīng)用程序中使用 Mockito 實現(xiàn)單元測試的步驟。

為什么選擇 Mockito?

通常我們有依賴于不同類的另一個方法的依賴和方法的類。當(dāng)我們對這些方法進行單元測試時,我們希望單元測試獨立于所有其他依賴項。這就是為什么我們將使用 Mockito 模擬依賴類并測試主類。我們無法使用 JUnit 實現(xiàn)這一點。

測試結(jié)果成為我們在 Bacancy 告訴我們后代開發(fā)人員的故事。
從屢獲殊榮的應(yīng)用程序開發(fā)公司聘請 Android 開發(fā)人員在市場上脫穎而出,成為具有您的商業(yè)理念的明星解決方案。

現(xiàn)在轉(zhuǎn)向我們的演示應(yīng)用程序。

步驟:在 Android 中使用 Mockito 進行單元測試

讓我們以加法、減法等計算的簡單示例來理解 Mockito 框架。

我們將創(chuàng)建一個文件ComputationActivity.kt來預(yù)先顯示所有計算。為了管理所有操作,我們將創(chuàng)建對象類 Operations.kt,它將作為主構(gòu)造函數(shù)中的參數(shù)傳遞給ComputationActivity類。

在 Android 中使用 Mockito 進行單元測試
類 ComputationActivity(私有 val 運算符:操作){
  有趣的 getAddition(x: Int, y: Int): Int = operators.add(x, y)
  fun getSubtraction(x: Int, y: Int): Int = operators.subtract(x, y)
  有趣的 getMultiplication(x: Int, y: Int): Int = operators.multiply(x, y)
  有趣的 getDivision(x: Int, y: Int): Int = operators.divide(x, y)}

Operations.kt 類看起來像這樣,它將處理計算函數(shù)。

在 Android 中使用 Mockito 進行單元測試
對象操作{
  有趣的添加(x:Int,y:Int):Int = x + y
  有趣的減法(x:Int,y:Int):Int = x - y
  有趣的乘法(x:Int,y:Int):Int = x * y
  fun divide(x: Int, y: Int): Int = x / y}

在 build.gradle 文件中添加集成 Mockito 所需的依賴。

我們將使用適用于本地測試源而非應(yīng)用程序的testImplementation 。

在 Android 中使用 Mockito 進行單元測試
testImplementation 'junit:junit:4.13.2'testImplementation 'org.mockito:mockito-core:2.25.0'testImplementation 'org.mockito:mockito-inline:2.13.0'

添加用于測試ComputationActivity.kt類的ComputationTest.kt 文件的文件夾結(jié)構(gòu)。

默認情況下,module-name/src/test將包含用于本地單元測試的源文件。

在 Android 中使用 Mockito 進行單元測試

現(xiàn)在,我們將在 ComputationTest.kt 文件中添加測試函數(shù)

  • @RunWith – 我們已經(jīng)用 MockitoJUnitRunner::class 進行了注釋,這意味著它提供了運行測試的 Runner。

  • @Mock – 使用@Mock 注釋我們可以模擬任何類。模擬任何類只不過是創(chuàng)建特定類的模擬對象。

在這里,我們將在測試文件中模擬Operations.kt類,因為ComputationActivity.kt文件依賴于它。

在 Android 中使用 Mockito 進行單元測試
@RunWith(MockitoJUnitRunner::類)類計算測試{
  @嘲笑
  lateinit var 運算符:操作
  lateinit var computationActivity:ComputationActivity}
  • @Before – 帶有@Before 注釋的方法在每次測試之前運行。如果您想運行通用代碼,此注釋非常有用。在這里,我們在 @Before 注釋的幫助下運行測試之前在我們的測試文件中初始化 ComputationActivity 類。

在 Android 中使用 Mockito 進行單元測試
@前有趣的設(shè)置(){
  computationActivity = ComputationActivity(運算符)}
  • @Test – 要執(zhí)行測試,我們需要用@Test 注釋函數(shù)。

在 Android 中使用 Mockito 進行單元測試
@測試有趣的 givenValidInput_getAddition_shouldCallAddOperator() {
  值 x = 5
  值 y = 10
  計算活動.getAddition(x, y)
  驗證(運算符).add(x, y)

驗證方法將檢查模擬對象的特定方法是否已被調(diào)用。

@After – @After 注釋用于在每個測試用例完成后運行。

@BeforeClass – @BeforeClass 當(dāng)你想運行一個太昂貴而無法運行多次的公共操作時使用。因此,使用此注釋,您可以在運行所有其他測試之前執(zhí)行此類操作。

@AfterClass – 用于在所有測試成功執(zhí)行后釋放任何引用。

內(nèi)聯(lián)模擬標(biāo)記:Mockito 無法直接測試最終類或靜態(tài)類。正如我們所知,Kotlin 類默認是最終的。所以要為這些類運行測試,我們需要添加標(biāo)記內(nèi)聯(lián)依賴。

Mockito 2.25.0 為使用 mockito-inline 的開發(fā)人員發(fā)布了一項重要功能。具體來說,任何使用 Kotlin 的人都需要使用 mockito-inline。轉(zhuǎn)到我們在 Android 教程中使用 Mockito 進行單元測試的最后一部分并運行測試。

運行測試

要執(zhí)行所有測試,請右鍵單擊 ComputationTest.kt 文件并選擇“運行”選項

您甚至可以通過右鍵單擊該函數(shù)并從那里選擇“運行”選項來僅運行一個測試函數(shù)。

在 Android 中使用 Mockito 進行單元測試

Github 來源:Android 中的單元測試

請隨意訪問源代碼:mockito-android-testing并嘗試使用代碼!

結(jié)論

  • Mockito 用于測試 Kotlin 中的最終課程。

  • Mockito 是移動開發(fā)人員編寫單元測試的廣泛使用的框架。

所以,這是關(guān)于在 Android 應(yīng)用程序中使用 Mockito 進行單元測試的。我們?yōu)槟鷾?zhǔn)備了更多與移動開發(fā)相關(guān)的教程!如果您正在尋找 Android 或 iOS 教程作為起點,那么移動開發(fā)教程頁面適合您!訪問教程并開始學(xué)習(xí)更多!如果您有任何問題或建議,可以給我們回信!我們很樂意幫助!

言鼎科技主做軟件開發(fā),微信小程序,網(wǎng)站開發(fā),軟件外包,手機APP開發(fā)。如有需要記得聯(lián)系我們!

The End