首頁  >  文章  >  Java  >  我什麼時候應該使用 @Mock、@MockBean 或 Mockito.mock() 在 Java 中進行 Mocking?

我什麼時候應該使用 @Mock、@MockBean 或 Mockito.mock() 在 Java 中進行 Mocking?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-26 05:03:02624瀏覽

When Should I Use @Mock, @MockBean, or Mockito.mock() for Mocking in Java?

理解@Mock、@MockBean和Mockito.mock()之間的差異

背景

在軟體中測試中,模擬是一種用於創建模擬實際依賴關係行為的假物件的技術。 Mockito 是 Java 中流行的模擬框架,它提供了多種模擬物件的方法。本指南比較了不同的方法及其適當的用法。

Mockito.mock() 與 @Mock(Mockito 註解)

Mockito.mock() 和 @Mock 是來自標準 Mockito 庫。兩者都為類別或介面創建模擬物件。 @Mock 提供了一個方便的基於註釋的解決方案,而 Mockito.mock() 則更加明確。就功能而言,它們是等效的。不過,最好使用 @Mock,因為它可以簡化程式碼。

@MockBean (Spring Boot)

@MockBean 是 Spring Boot 測試庫提供的包裝器。它將 Mockito 模擬功能與 Spring 的 bean 管理結合。與 Mockito.mock() 和 @Mock 不同,@MockBean 建立注入到 Spring ApplicationContext 中的模擬 bean。它有兩個關鍵特徵:

  • 如果上下文中存在相同類型的bean,則將其替換為mock。
  • 如果不存在相同類型的bean,則將其替換為mock。模擬 bean 被加入到上下文中。

使用指南

何時使用普通Mockito:在測試組件時使用Mockito.mock() 或@Mock依賴Spring Boot 依賴項或當測試組件的隔離至關重要時。

何時使用 @MockBean:在 Web 測試切片(例如 @WebMvcTest)或其他需要修改 Spring Boot bean 的測試場景中使用 @MockBean定義或與容器管理的 bean 互動。

使用 @MockBean 的範例

考慮一個 Spring Boot Web 測試,其中 FooController 依賴 FooService。使用@MockBean,我們可以在測試上下文中用模擬替換真正的FooService bean:

<code class="java">@WebMvcTest(FooController.class)
public class FooControllerTest {

    @MockBean
    private FooService fooServiceMock;

    // ... //
}</code>

在這個例子中,fooServiceMock實例將被注入到FooController中,允許我們模擬它的行為和控制它如何與控制器互動。

以上是我什麼時候應該使用 @Mock、@MockBean 或 Mockito.mock() 在 Java 中進行 Mocking?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn