生活随笔
收集整理的這篇文章主要介紹了
JUnit和Mockito合作
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這次,我想對測試框架Mockito進行概述。 毫無疑問,這是用于測試Java代碼的最受歡迎的工具之一。 我已經對Mockito的競爭對手EasyMock進行了概述。 這篇文章將基于有關EasyMock的示例應用程序。 我的意思是代表咖啡機功能的類。
用Mockito準備測試
通常,我將使用Maven進行項目設置。 因此,要使Mockito在項目中可用,我需要在pom.xml文件中添加以下依賴項:
<dependencies><dependency><groupid>org.mockito</groupid><artifactid>mockito-all</artifactid><version>1.9.5</version></dependency><dependency><groupid>junit</groupid><artifactid>junit</artifactid><version>4.11</version></dependency></dependencies>
請注意,Mockito的正常功能不需要JUnit,可以用相同的方法使用TestNG來代替它。 因此,您可以根據自己的決定使用JUnit或TestNG。
讓我們進一步。 如前所述,本文中的所有測試都是針對EasyMock帖子中的示例應用程序編寫的。 您可以從此處僅閱讀“應用程序代碼”部分。 這足以了解測試的主題。
Mockito和JUnit測試
我想從關于Mockito框架的幾句話開始本節。 毫無疑問,借助Mockito,您可以完成測試中希望做的所有事情。 您可以在清除API的幫助下創建模擬,存根,進行驗證以及所有這些操作。
現在該看看使用Mockito進行單元測試的樣子了。
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;import com.app.data.Portion;
import com.app.exceptions.NotEnoughException;
import com.app.mechanism.CoffeeMachine;
import com.app.mechanism.interfaces.ICoffeeMachine;
import com.app.mechanism.interfaces.IContainer;@RunWith(MockitoJUnitRunner.class)
public class CoffeeMachineTest {ICoffeeMachine coffeeMachine;@MockIContainer coffeeContainer;@MockIContainer waterContainer;@Beforepublic void setUp() {coffeeMachine = new CoffeeMachine(coffeeContainer, waterContainer);}@Afterpublic void tearDown() {coffeeContainer = null;waterContainer = null;coffeeMachine = null; }@Testpublic void testMakeCoffe() throws NotEnoughException {when(coffeeContainer.getPortion(Portion.LARGE)).thenReturn(true);when(waterContainer.getPortion(Portion.LARGE)).thenReturn(true);assertTrue(coffeeMachine.makeCoffee(Portion.LARGE));}@Testpublic void testNotEnoughException() throws NotEnoughException {when(coffeeContainer.getPortion(Portion.SMALL)).thenReturn(false);when(waterContainer.getPortion(Portion.SMALL)).thenReturn(true);assertFalse(coffeeMachine.makeCoffee(Portion.SMALL));}}
我將用幾句話解釋一下測試班里發生了什么。 我正在測試咖啡機,為此,我為咖啡容器和水容器創建了模擬。 進一步在測試中,我將為模擬定義一些行為,并根據這臺咖啡機執行預期的操作。
...@MockIContainer coffeeContainer;@MockIContainer waterContainer;
...
在上面的代碼中,我聲明了兩個模擬。 以這種方式創建模擬需要將@RunWith(MockitoJUnitRunner.class)批注應用于測試類。 或者,您可以使用MockitoAnnotations.initMocks(testClass); 在運行任何測試之前,例如,您可以將此代碼段放入@Before注釋的方法中。
...
when(coffeeContainer.getPortion(Portion.LARGE)).thenReturn(true);
...
在Mockito中定義模擬的行為非常方便。 您可以指定在調用特定方法后應返回的內容。 注意,我在測試類中進行了幾次靜態導入 。
摘要
Mockito框架征服了我的心。 這非常方便,其API清晰,使用簡便。 Mockito包含許多在單元測試開發過程中可能需要的方法。 當然,一篇文章太小而無法描述Mockito的所有功能,因此我建議您使用官方文檔的跟隨鏈接進行更深入的研究。
參考: Fruzenshtein的便箋博客中來自JCG合作伙伴 Alexey Zvolinskiy的JUnit和Mockito合作 。
翻譯自: https://www.javacodegeeks.com/2013/05/junit-and-mockito-cooperation.html
總結
以上是生活随笔為你收集整理的JUnit和Mockito合作的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。