理解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中文網其他相關文章!