我正在尝试对下面的方法进行单元测试。它发出了一个WS调用,响应中包含了一个我需要在其他地方使用的字符串。
String[] getPathFromWS(WebTarget target) throws RuntimeException, IOException {
Response response = target.request().header(AUTHORIZATION, getAuthorizationToken()).get();
if (response.getStatus() != Response.Status.OK.getStatusCode()) {
//do something
}
//create responseArray from WS
return responseArray;
}
下面是JUnit测试。我试图通过一个模拟WebTarget并使用它来生成所需的响应。
@Before
public void setUp() {
chemistryLicenseManager = new ChemistryLicenseManager(configMock);
}
@Test
public void getPathFromWS_success() throws IOException {
WebTarget webTargetMock = Mockito.mock(WebTarget.class);
Builder builderMock = Mockito.mock(Builder.class);
Response responseMock = Mockito.mock(Response.class);
when(webTargetMock.request()).thenReturn(builderMock);
when(builderMock.header(ArgumentMatchers.anyString(), ArgumentMatchers.anyString())).thenReturn(builderMock);
when(builderMock.get()).thenReturn(responseMock);
String jsonResponse = "{ \"" + "someKey" + "\": \"dummy paths\" }";
when(responseMock.getStatus()).thenReturn(Response.Status.OK.getStatusCode());
when(responseMock.readEntity(String.class)).thenReturn(jsonResponse);
String[] result = chemistryLicenseManager.getLicensePathFromWS(webTargetMock);
//assertions here
}
目前我得到空指针在线:Response response = target.request().header(AUTHORIZATION, getAuthorizationToken()).get();
即使我在嘲笑WebTarget。有人能指出我是否遗漏了什么吗?
谢谢
1条答案
按热度按时间2guxujil1#
解决方案非常简单,而且可能难以理解,因为错误日志没有足够的详细信息。
有一个anyString()作为第二个参数,但实际的方法需要一个对象。
这也适用于旧版本: