<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Mockito2 教程 – JUnit Mockito 示例 > 原文: [https://howtodoinjava.com/mockito/junit-mockito-example/](https://howtodoinjava.com/mockito/junit-mockito-example/) 在本 **mockito 教程**中,學習了 Mockito 框架的基礎知識,如何編寫 [junit](https://howtodoinjava.com/junit-4/) 測試以及模擬,樣例設置和帶有示例的注解。 ```java Table of Contents 1\. Introduction 2\. Setting Up 3\. Annotations 4\. Example ``` ## 1\. Mockito 簡介 在應用的單元測試期間,有時無法復制精確的生產環境。 有時數據庫不可用,有時不允許網絡訪問。 可以有更多這樣的限制。 為了解決這些限制,我們必須為這些不可用的資源創建模擬。 Mockito 是一個開放源代碼框架,可讓您輕松創建[測試雙打](https://www.martinfowler.com/bliki/TestDouble.html)(模擬)。 對于您出于測試目的而替換生產對象的任何情況,雙重測試是一個通用術語。 在模擬中,我們通常使用以下類型的測試雙打。 * **存根** – 是一個對象,該對象對測試期間執行的方法執行具有預定義的返回值。 * **間諜** – 與存根相似的對象,但它們另外記錄了它們的執行方式。 * **模擬** – 是在測試期間對方法執行返回值并記錄了對這些執行的期望的對象。 如果模擬人收到了他們不期望的電話,并且在驗證過程中對其進行了檢查,以確保他們收到了所有期望的電話,它們可能會引發異常。 我們可以在測試類中模擬接口和類。 Mockito 還可以在使用 Mockito 注解時幫助產生最少的樣板代碼。 ## 2\. Mockito 設置 要將 Mockito 添加到項目中,我們可以通過任何方式添加所需的 Mockito 版本,即 [maven](https://mvnrepository.com/artifact/org.mockito/mockito-core) ,gradle 或 [jar 文件](http://central.maven.org/maven2/org/mockito/mockito-core/2.23.4/mockito-core-2.23.4.jar)。 ```java <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <version>2.23.4</version> <scope>test</scope> </dependency> ``` ```java testCompile group: 'org.mockito', name: 'mockito-core', version: '2.23.4' ``` 下面給出了具有創建 Junit 測試以及 mockito 的所有依賴項的完整 pom 文件。 否則,我們需要查找并添加`objenesis`,`hamcrest-core`,`byte-buddy`,`byte-buddy-agent`,`junit`和`mockito`的匹配版本。 ```java <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.howtodoinjava.demo</groupId> <artifactId>MockitoExample</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <version>2.23.0</version> <scope>test</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies> </project> ``` ## 3\. Mockito 注解 在敲鍵盤來編寫應用和單元測試之前,讓我們快速概述有用的 Mockito 注解。 * `@Mock`用于模擬創建。 它使測試類更具可讀性。 * `@Spy`用于創建間諜實例。 我們可以使用它代替`spy(Object)`方法。 * `@InjectMock`用于自動實例化測試對象,并將所有`@Mock`或`@Spy`帶注解的字段依賴項注入其中(如果適用)。 * `@Captor`用于創建參數捕獲器 > 閱讀更多: [`@Mock`和`@InitMock`注解之間的區別](https://howtodoinjava.com/mockito/mockito-mock-initMock/) 要處理所有上述注解,`MockitoAnnotations.initMock(testClass);`必須至少使用一次。 要處理注解,我們可以使用內置運行器`MockitoJUnitRunner`或規則`MockitoRule`。 我們還可以在`@Before`帶注解的 Junit 方法中顯式調用`initMock()`方法。 ```java //1 @RunWith(MockitoJUnitRunner.class) public class ApplicationTest { //code } ``` ```java //2 public class ApplicationTest { @Rule public MockitoRule rule = MockitoJUnit.rule().strictness(Strictness.STRICT_Stub); //code } ``` ```java //3 public class ApplicationTest { @Before public void init() { MockitoAnnotations.initMock(this); } } ``` ## 4\. JUnit Mockito 示例 讓我們學習編寫將模擬程序用于依賴項的 junit 測試。 給定的示例具有`RecordService`,該文件在`DatabaseDAO`和`NetworkDAO`的幫助下將給定文件存儲在數據庫和網絡位置中。 在測試環境中,無法訪問數據庫或網絡位置,因此我們正在為兩個倉庫創建模擬。 ```java public class DatabaseDAO { public void save(String fileName) { System.out.println("Saved in database"); } } ``` ```java public class NetworkDAO { public void save(String fileName) { System.out.println("Saved in network location"); } } ``` ```java public class RecordService { DatabaseDAO database; NetworkDAO network; //setters and getters public boolean save(String fileName) { database.save(fileName); System.out.println("Saved in database in Main class"); network.save(fileName); System.out.println("Saved in network in Main class"); return true; } } ``` 請記住,如果我們使用諸如 Spring 之類的任何 DI 框架,那么我們可能已經使用了注解`@Autowired`。 要測試這個`RecordService`類,讓我們創建一個單元測試。 ```java import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMock; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; import com.howtodoinjava.demo.mockito.DatabaseDAO; import com.howtodoinjava.demo.mockito.NetworkDAO; import com.howtodoinjava.demo.mockito.RecordService; @RunWith(MockitoJUnitRunner.class) public class ApplicationTest { @InjectMock RecordService recordService; @Mock DatabaseDAO databaseMock; @Mock NetworkDAO networkMock; @Test public void saveTest() { boolean saved = recordService.save("temp.txt"); assertEquals(true, saved); verify(databaseMock, times(1)).save("temp.txt"); verify(networkMock, times(1)).save("temp.txt"); } } ``` 讓我們逐步了解以上測試類: * 用`@RunWith(MockitoJUnitRunner.class)`注解測試,以便 Mockito 可以處理注解。 * 使用`@Mock`注解對 dao 字段進行注解,以為它們兩個實例化一個模擬對象。 * 使用`@InjectMock`注解對服務字段進行注解,以首先實例化然后注入兩個模擬的依賴項。 * 在要測試的類上調用方法進行測試,即`recordService`。 * 驗證模擬對象中的方法已被調用。 還有許多其他方法可以測試方法和模擬的依賴項,我們將在以后的文章中介紹。 將有關此 **junit Mockito2 示例**的問題交給我。 學習愉快! 參考: [Mockito Core Java 文檔](https://static.javadoc.io/org.mockito/mockito-core/2.9.0/org/mockito/Mockito.html)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看