首頁 > Java > java教程 > 如何使用 Mockito 透過 `new()` 呼叫來模擬類別?

如何使用 Mockito 透過 `new()` 呼叫來模擬類別?

Mary-Kate Olsen
發布: 2024-10-30 00:23:29
原創
703 人瀏覽過

How Can You Mock a Class with a `new()` Call Using Mockito?

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

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