<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>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # Mockito – `@Mock`和`@InjectMock`注解之間的區別 > 原文: [https://howtodoinjava.com/mockito/mockito-mock-injectMock/](https://howtodoinjava.com/mockito/mockito-mock-injectMock/) 在使用 [junit](https://howtodoinjava.com/junit-4/) 和 Mockito 進行[單元測試](https://howtodoinjava.com/best-practices/unit-testing-best-practices-junit-reference-guide/)的過程中,我們使用`@Mock`和`@InjectMock`注解來創建要測試的對象和依賴項。 了解 mockito 中`@Mock`和`@InjectMock`注解之間的*區別*。 ## 1\. 模擬對象與存根對象之間的區別 重要的是要了解模擬對象與[存根對象](https://howtodoinjava.com/java/basics/how-to-create-a-class-in-java/)之間的區別。 對象是類的實際實例,使用對象引用調用的任何方法都將執行類文件中定義的方法主體。 模擬對象是用于隱藏無法在測試環境中測試的依賴項的接口。 數據庫,網絡位置等。使用模擬引用調用的方法不會執行類文件中定義的方法主體,而是使用`when-thenReturn`方法組合來配置方法行為。 在 junit 測試中,我們為需要測試的類和要調用的方法創建對象。 我們為依賴項創建了模擬,這些依賴項不會出現在測試環境中,并且對象依賴于該依賴項來完成方法調用。 ## 2\. `@Mock`和`@InjectMock`之間的區別 在基于 Mockito 的 junit 測試中,**`@Mock`注解創建模擬,而`@InjectMock`創建類對象**。 > `@Mock` – 創建模擬 > `@InjectMock` – 創建對象并注入模擬的依賴項 * 使用`@InjectMock`創建需要在測試類中進行測試的類實例。 * 當需要為給定類執行實際方法主體時,請使用`@InjectMock`。 * 當我們需要使用模擬對象初始化的所有內部依賴項以正常工作方法時,請使用`@InjectMock`。 * 使用`@Mock`創建模擬,以支持要測試的類的測試。 * 帶有`@Mock`注解的帶注解的類(待測試)依賴項。 * 我們必須為模擬對象定義`when-thenRetrun`方法,在實際測試執行期間將調用哪些類方法。 ## 3\. `@Mock`和`@InjectMock`示例 讓我們通過示例來了解`@Mock`和`@InjectMock`之間的區別。 在此示例中,我們具有類`MainClass`,其類具有方法`save()`。 `MainClass`依賴于`DatabaseDAO`和`NetworkDAO`。 當我們調用`MainClass.save()`方法時,它在內部調用兩個相關對象的保存方法。 #### 3.1 Java 類 ```java public class MainClass { 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; } } ``` ```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"); } } ``` #### 3.2 `MainClass`的 Junit 測試 讓我們為`MainClass`編寫 junit 測試。 ```java import static org.junit.Assert.assertEquals; import org.junit.Before; import org.junit.Test; import org.mockito.InjectMock; import org.mockito.Mock; import org.mockito.MockitoAnnotations; public class ApplicationTest { @InjectMock MainClass mainClass; @Mock DatabaseDAO dependentClassOne; @Mock NetworkDAO dependentClassTwo; @Before public void init() { MockitoAnnotations.initMock(this); } @Test public void validateTest() { boolean saved = mainClass.save("temp.txt"); assertEquals(true, saved); } } ``` 測試成功執行,我們在控制臺中獲得以下語句。 **仔細觀察控制臺輸出。** ```java Saved in database in Main class Saved in network in Main class ``` 在上面的測試中,將打印用`MainClass.save()`方法編寫的語句,但不打印從屬類。 它證明了方法主體僅針對`MainClass`的`save()`方法執行,因為我們使用`@InjectMock`注解創建了`MainClass`的實際對象。 對于依賴類,我們使用了模擬。 #### 3.3 驗證模擬的方法調用 要驗證是否已調用模擬方法,我們必須使用模擬提供的工具方法`verify()`。 它有助于驗證在執行實際的測試類方法時是否已執行了模擬方法。 ```java @Test public void validateTest() { boolean saved = mainClass.save("temp.txt"); assertEquals(true, saved); verify(dependentClassOne, times(1)).save("temp.txt"); verify(dependentClassTwo, times(1)).save("temp.txt"); } ``` ## 4 總結 在此 mockito 教程中,我們了解了`@Mock`和`@InjectMock`注解之間的*區別*。 我們了解了在 junit 測試中將這些注解應用于類時發生了什么。 學習愉快! 參考: [Mockito 指南](https://static.javadoc.io/org.mockito/mockito-core/2.23.4/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>

                              哎呀哎呀视频在线观看