使用Mockito 透過New() 呼叫來模擬類別
遺留類別通常在內部實施對象,這使得使用模擬測試它們變得具有挑戰性像Mockito 這樣的框架。當設定複雜的依賴項時,例如需要外部設定的安全上下文,這一點變得很明顯。
考慮範例類:
<code class="java">public class TestedClass { public LoginContext login(String user, String password) { LoginContext lc = new LoginContext("login", callbackHandler); } }</code>
我們想要測試這個類,但是login()方法實例化一個LoginContext 對象,在不重構程式碼的情況下使模擬變得複雜。
Mockito 可以模擬 LoginContext 嗎?
是的,可以透過以下方式使用 Mockito 來模擬 LoginContext 類別:利用間諜的強大功能。與存根不同,間諜呼叫被監視物件的真實方法(除非方法已被存根)。
使用Spies 來模擬LoginContext
來模擬在不改變原始程式碼的情況下,我們可以使用以下方法:
<code class="java">TestedClass tc = spy(new TestedClass()); LoginContext lcMock = mock(LoginContext.class); when(tc.login(anyString(), anyString())).thenReturn(lcMock);</code>
結論
透過策略性地使用間諜,我們可以有效地模擬內部實例化物件的類,即使原始程式碼保持不變。這項技術使我們能夠有效地測試此類類別並確保它們的行為符合預期。
以上是如何使用 Mockito 透過 `new()` 呼叫來模擬類別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!