首页  >  文章  >  Java  >  如何使用 Mockito Spies 测试带有嵌入式 `new()` 调用的类?

如何使用 Mockito Spies 测试带有嵌入式 `new()` 调用的类?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-27 12:48:29814浏览

How to Test Classes with Embedded `new()` Calls Using Mockito Spies?

使用嵌入式测试类 new() 使用 Mockito 调用

考虑一个遗留类 (TestedClass),使用直接 new() 调用实例化 LoginContext 对象:

<code class="java">public class TestedClass {
  public LoginContext login(String user, String password) {
    LoginContext lc = new LoginContext("login", callbackHandler);
  }
}</code>

LoginContext 实例化需要特定的 JAAS 安全配置。为了解决这个问题,我们探索使用 Mockito 来模拟 LoginContext 类,而无需修改原始源代码。

使用 Mockito Spies

Mockito提供了一种称为间谍的便捷机制,允许我们创建真实对象的间谍,该间谍执行以下方法:

  • 默认调用真实方法(除非单独存根)。
  • Spies 可以谨慎用于遗留代码场景。
要使用 spies 测试我们的类,我们可以引入以下代码:

<code class="java">TestedClass tc = spy(new TestedClass());
LoginContext lcMock = mock(LoginContext.class);
when(tc.login(anyString(), anyString())).thenReturn(lcMock);</code>
此代码创建

TestedClass 实例 (tc ) 的间谍,并通过 lcMock 模拟 LoginContext 类。 when() 语句对 login() 方法进行存根,以返回模拟的 LoginContext

使用间谍可以让我们测试原始类不改变其

new()调用机制,提供灵活有效的测试方法。

以上是如何使用 Mockito Spies 测试带有嵌入式 `new()` 调用的类?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn