如何在 Java 中模拟新的对象创建



下面是要模拟的代码:

private MultivaluedMap<String, Object> addAuthorizationAndCorrelationIdHeader(MultivaluedMap<String, Object> httpHeaders) {
    if(httpHeaders == null)
        httpHeaders = new MultivaluedHashMap<>();
        String token = new JSONWebToken().getUserInfo().getToken("SYSTEM", "JobScheduler");
}

如何模拟新的JSONWebToken()部分?

你应该创建某种JSONTokenFactory,如下所示:

public class JSONWebTokenFactory {
    public JSONWebToken creaateWebToken() {
        return new JSONWebToken(); 
    }
}

然后将工厂的实例传递给要测试的类。现在,您可以在测试中通过JSONTokenFactory的模拟。

有两个选项:

  1. 您可以使用模拟框架(如 PowerMock 或 Mockito),这些框架允许对new进行模拟调用
  2. 避免在生产代码中执行new调用。相反,您使用依赖关系注入;例如,通过使用工厂(如您已经得到的答案),或通过构造函数传入此类对象。

长话短说:使用new可能会导致"难以测试"的代码。真正的答案是学习如何创建可测试的代码;一个很好的起点是这些视频。

您可以使用间谍org.mockito.Mockito.spy . 它看起来像这样。

@RunWith(MockitoJUnitRunner.class)
class YourTestClass {
@Test
public void yourTestCase() {
    JSONWebToken jwt = spy(new JSONWebToken());
    UserInfo mockUserInfo = mock(UserInfo.class);
    when(jwt.getUserInfo()).thenReturn(mockUserInfo);
}
}

相关内容

  • 没有找到相关文章

最新更新