<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之旅 廣告
                # Mockito 注解– `@Mock`,`@Spy`,`@Captor`,`@InjectMock` > 原文: [https://howtodoinjava.com/mockito/mockito-annotations/](https://howtodoinjava.com/mockito/mockito-annotations/) 在此 Mockito 教程中,了解 **Mockito 注解**,例如`@Mock`,`@Spy`,`@Captor`,`@InjectMock`。 學習使用模仿注解為行為測試編寫單元測試。 ## 1\. Mockito 注解 #### 1.1 `@Mock` `@Mock`注解用于創建和注入模擬實例。 我們不創建真實的對象,而是要求模擬為類創建一個模擬。 `@Mock`注解是`Mockito.mock(classToMock)`的替代方法。 它們都達到相同的結果。 通常認為使用`@Mock`是“**清潔器**”,因為我們沒有用看起來都一樣的樣板分配填充測試。 使用`@Mock`注解: * 允許快速創建測試所需的對象。 * 最小化重復的模擬創建代碼。 * 使測試類更具可讀性。 * 由于使用字段名稱來識別模擬,因此使驗證錯誤更易于閱讀。 在給定的示例中,我們模擬了`HashMap`類。 在實際測試中,我們將模擬實際的應用類。 我們在映射中放置了一個鍵值對,然后驗證了對模擬映射實例執行了方法調用。 ```java @Mock HashMap<String, Integer> mockHashMap; @Test public void saveTest() { mockHashMap.put("A", 1); Mockito.verify(mockHashMap, times(1)).put("A", 1); Mockito.verify(mockHashMap, times(0)).get("A"); assertEquals(0, mockHashMap.size()); } ``` #### 1.2 `@Spy` `@Spy`注解用于**創建真實對象并監視該真實對象**。 間諜程序可以幫助調用對象的所有常規方法,同時仍可以跟蹤每次交互,就像使用模擬一樣。 請注意,在給定的示例中,由于我們向其中添加了一個鍵值對,因此映射的大小如何保持為 1。 我們還可以使用它的鍵取回添加到映射的值。 在模擬實例中是不可能的。 ```java @Spy HashMap<String, Integer> hashMap; @Test public void saveTest() { hashMap.put("A", 10); Mockito.verify(hashMap, times(1)).put("A", 10); Mockito.verify(hashMap, times(0)).get("A"); assertEquals(1, hashMap.size()); assertEquals(new Integer(10), (Integer) hashMap.get("A")); } ``` ###### `@Mock`和`@Spy`之間的區別 使用`@Mock`時,mockito 將創建類的準系統的 shell 實例,完全可以跟蹤與之的交互。 這不是真實的對象,也不維護其狀態更改。 使用`@Spy`時,mockito 創建類的真實實例并跟蹤與之的每次交互。 它保持狀態更改。 #### 1.3 `@Captor` `@Captor`注解用于創建`ArgumentCaptor`實例,該實例用于**捕獲方法參數值**進行進一步的聲明。 請注意,mockito 使用參數類的`equals()`方法驗證參數值。 ```java @Mock HashMap<String, Integer> hashMap; @Captor ArgumentCaptor<String> keyCaptor; @Captor ArgumentCaptor<Integer> valueCaptor; @Test public void saveTest() { hashMap.put("A", 10); Mockito.verify(hashMap).put(keyCaptor.capture(), valueCaptor.capture()); assertEquals("A", keyCaptor.getValue()); assertEquals(new Integer(10), valueCaptor.getValue()); } ``` #### 1.4 `@InjectMock` 在模擬中,我們需要創建要測試的類的對象,然后插入其依賴項(*模擬*)以完全測試行為。 為此,我們使用`@InjectMock`注解。 `@InjectMock`標記應在其上執行注射的字段。 Mockito 將嘗試僅通過構造器注入,設置器注入或屬性注入按此順序注入模擬。 如果任何給定的注射策略失敗,則 Mockito 不會報告失敗。 > 閱讀更多: [`@Mock`和`@InitMock`注解之間的區別](https://howtodoinjava.com/mockito/mockito-mock-initMock/) ## 2\. 如何初始化 Mockito 注解 為了使用上述注解,測試類應使用以下三種給定方法之一初始化注解: 1. 在單元測試課的頂部使用`@RunWith(MockitoJUnitRunner.class)`。 ```java @RunWith(MockitoJUnitRunner.class) public class ExampleTest { @Mock private List list; @Test public void shouldDoSomething() { list.add(100); } } ``` 2. 在單元測試類的`@Before`方法中使用`MockitoAnnotations.initMock(this)`。 ```java public class ExampleTest { @Mock private List list; @Before public void setup() { MockitoAnnotations.initMock(this); } @Test public void shouldDoSomething() { list.add(100); } } ``` 3. 使用`MockitoJUnit.rule()`創建`MockitoRule`類。 ```java public class ExampleTest { @Rule public MockitoRule rule = MockitoJUnit.rule(); @Mock private List list; @Test public void shouldDoSomething() { list.add(100); } } ``` 在評論中,將您與 Mockito 注解有關的問題放到我這里。 學習愉快! 參考文獻: [`Mock` Java Doc](https://static.javadoc.io/org.mockito/mockito-core/2.23.4/org/mockito/Mock.html) [`Spy` Java Doc](https://static.javadoc.io/org.mockito/mockito-core/2.23.4/org/mockito/Spy.html) [`Captor` Java Doc](https://static.javadoc.io/org.mockito/mockito-core/2.23.4/org/mockito/Captor.html) [`InjectMock` Java Doc](https://static.javadoc.io/org.mockito/mockito-core/2.23.4/org/mockito/InjectMock.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>

                              哎呀哎呀视频在线观看