我正在尝试编写一个junit来模拟来自RestClientBuilder类的响应,但我不得不做的事情似乎非常复杂,甚至不起作用。
在下面的代码中,我希望IResourceAPI中对getWorkBean(int)方法的调用返回一个WorkBean对象。
到目前为止,我的junit方法测试代码是:
import org.eclipse.microprofile.rest.client.RestClientBuilder;
import javax.json.bind.Jsonb;
import javax.json.bind.JsonbBuilder;
PowerMockito.mockStatic(RestClientBuilder.class);
RestClientBuilder restClientBuilderNewBuilder = Mockito.mock(RestClientBuilder.class);
PowerMockito.when(RestClientBuilder.newBuilder()).thenReturn(restClientBuilderNewBuilder);
RestClientBuilder restClientBuilderBaseURI = Mockito.mock(RestClientBuilder.class);
Mockito.when(restClientBuilderNewBuilder.baseUri(any(URI.class))).thenReturn(restClientBuilderBaseURI);
IResourceAPI resourceAPI = Mockito.mock(IResourceAPI.class);
Mockito.when(restClientBuilderBaseURI.build(IResourceAPI.class)).thenReturn(resourceAPI);
Response.ResponseBuilder responseBuilder = Response.ok();
Mockito.when(resourceAPI.updateStatus(anyInt(), anyString(), any(WorkBeanAction.class))).thenReturn(responseBuilder.build());
WorkBean workBean = new WorkBean();
Jsonb jsonb = JsonbBuilder.create();
InputStream is = new ByteArrayInputStream(jsonb.toJson(workBean).getBytes());
responseBuilder = Response.ok().entity(is);
Mockito.when(resourceAPI.getWorkBean(anyInt())).thenReturn(responseBuilder.build());我得到的例外是:
javax.ws.rs.core.Response$ResponseBuilder.status(ILjava/lang/String;)Ljavax/ws/rs/core/Response$ResponseBuilder;
java.lang.AbstractMethodError: javax.ws.rs.core.Response$ResponseBuilder.status(ILjava/lang/String;)Ljavax/ws/rs/core/Response$ResponseBuilder;发布于 2021-02-18 16:22:01
经过多次尝试之后,我有了一个解决方案。
private IWebAppResource webAppResource = Mockito.mock(IWebAppResource.class);
@Before
public void before() {
PowerMockito.mockStatic(RestClientBuilder.class);
RestClientBuilder restClientBuilderNewBuilder = Mockito.mock(RestClientBuilder.class);
PowerMockito.when(RestClientBuilder.newBuilder()).thenReturn(restClientBuilderNewBuilder);
RestClientBuilder restClientBuilderBaseURI = Mockito.mock(RestClientBuilder.class);
Mockito.when(restClientBuilderNewBuilder.baseUri(any(URI.class))).thenReturn(restClientBuilderBaseURI);
Mockito.when(restClientBuilderBaseURI.build(IWebAppResource.class)).thenReturn(webAppResource);
}
@Test
public void doSomethingFunky() {
Mockito.when(webAppResource.getResource(Mockito.anyInt())).thenReturn(Response.ok().build);
}https://stackoverflow.com/questions/65990485
复制相似问题