首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用mockito测试microprofile RestClientBuilder?

如何使用mockito测试microprofile RestClientBuilder?
EN

Stack Overflow用户
提问于 2021-02-01 17:50:42
回答 1查看 177关注 0票数 0

我正在尝试编写一个junit来模拟来自RestClientBuilder类的响应,但我不得不做的事情似乎非常复杂,甚至不起作用。

在下面的代码中,我希望IResourceAPI中对getWorkBean(int)方法的调用返回一个WorkBean对象。

到目前为止,我的junit方法测试代码是:

代码语言:javascript
复制
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());

我得到的例外是:

代码语言:javascript
复制
 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;
EN

回答 1

Stack Overflow用户

发布于 2021-02-18 16:22:01

经过多次尝试之后,我有了一个解决方案。

代码语言:javascript
复制
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);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65990485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档