首頁 > Java > java教程 > Mockito 的 @Mock 和 @InjectMocks 註解有什麼不同?

Mockito 的 @Mock 和 @InjectMocks 註解有什麼不同?

Patricia Arquette
發布: 2024-11-25 02:20:18
原創
534 人瀏覽過

What's the Difference Between Mockito's @Mock and @InjectMocks Annotations?

理解Mockito 中@Mock 和@InjectMocks 的區別

Mockito 是一個流行的Java 模擬框架,它提供了兩個重要的註:@模擬和@InjectMocks。雖然兩者對於模擬測試都是必不可少的,但它們具有不同的目的。

@Mock:建立 Mock

@Mock 用來建立模擬物件。它代表真實物件的偽造或模擬實作。模擬允許您控制它們的行為並在測試中斷言它們的交互作用。例如:

@Mock
private SomeDependency someDependency;
登入後複製

此程式碼建立 SomeDependency 介面的模擬。然後你可以在測試中使用這個mock。

@InjectMocks:注入Mocks

相較之下,@InjectMocks扮演著不同的角色。它用於創建類別的實例,並將使用@Mock(或@Spy)註釋創建的模擬注入到該實例中。這允許您測試多個類別及其依賴項之間的交互,而無需建立真實實例。例如:

@InjectMocks
private SomeManager someManager;
登入後複製

在這種情況下,someManager 是 SomeManager 類別的實例。 @InjectMocks 註解告訴 Mockito 將 someDependency 模擬注入到 someManager 實例中。

初始化和使用說明

要使用@InjectMocks,您必須使用@ 初始化模擬RunWith(MockitoJUnitRunner.class) 或Mockito.initMocks(this) 對於JUnit 4JUnitRunner.class) 或Mockito.initMocks(this) JUnit 5 的@ExtendWith(MockitoExtension.class)。此外,請記住 @InjectMocks 只能在測試類別中使用一次,並且應將其放置在代表被測試類別的欄位上。

用法範例

以下範例說明如何使用@Mock 和@InjectMocks:

@RunWith(MockitoJUnitRunner.class)
public class SomeManagerTest {

    @InjectMocks
    private SomeManager someManager;

    @Mock
    private SomeDependency someDependency; // this will be injected into someManager
 
    // tests...
}
登入後複製

在這個測驗中,someDependency 將自動模擬將自動模擬注入到someManager 實例中,讓您可以有效地測試它們的互動。

以上是Mockito 的 @Mock 和 @InjectMocks 註解有什麼不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板