如何在Java中模拟新对象的创建
下面是要模拟的代码:如何在Java中模拟新对象的创建,java,junit,mockito,Java,Junit,Mockito,下面是要模拟的代码: private MultivaluedMap<String, Object> addAuthorizationAndCorrelationIdHeader(MultivaluedMap<String, Object> httpHeaders) { if(httpHeaders == null) httpHeaders = new MultivaluedHashMap<>(); String tok
private MultivaluedMap<String, Object> addAuthorizationAndCorrelationIdHeader(MultivaluedMap<String, Object> httpHeaders) {
if(httpHeaders == null)
httpHeaders = new MultivaluedHashMap<>();
String token = new JSONWebToken().getUserInfo().getToken("SYSTEM", "JobScheduler");
}
private MultivaluedMap addAuthorizationAndCorrelationIdHeader(MultivaluedMap httpHeaders){
if(httpHeaders==null)
httpHeaders=新的多值hashMap();
String token=new JSONWebToken().getUserInfo().getToken(“系统”、“作业调度器”);
}
如何模拟新的JSONWebToken()部件?您应该创建某种JSONTokenFactory,如:
public class JSONWebTokenFactory {
public JSONWebToken creaateWebToken() {
return new JSONWebToken();
}
}
然后将工厂实例传递给您正在测试的类。现在,您可以在测试中通过JSONTokenFactory的模拟。您可以使用spy
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);
}
}
有两种选择:
new
新的调用。相反,您使用依赖注入;例如,通过使用工厂(如您已经得到的答案),或通过构造函数传入此类对象
长话短说:使用
new
会导致代码“难以测试”。真正的答案是学习如何创建可测试的代码;这是一个很好的起点。仍然抛出空指针:因为它在这个(新的JSONWebToken().getUserInfo())中得到计算,它返回为空。请确保在类之前添加了@RunWith(MockitoJUnitRunner.class)