用javax.ws.rs.client对inputStream进行Java编写测试。

问题描述 投票:0回答:1

我有一个使用java.ws.rs这样的GET api。

@GET
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response getMyFile() throws AbsoluteException {
    StreamingOutput outputStream;
    Client client = ClientBuilder.newClient();
    try {
        final InputStream responseStream = client.target(myFileUrl).request().get(InputStream.class);
        outputStream = new StreamingOutput() {
            @Override
            public void write(OutputStream out) throws IOException {
                int length;
                byte[] buffer = new byte[downloadBufferSize];
                while ((length = responseStream.read(buffer)) != -1) {
                    out.write(buffer, 0, length);
                }
                out.flush();
                responseStream.close();
            }
        };
    } catch (Exception ex) {

    }
    return Response
            .ok(outputStream, MediaType.APPLICATION_OCTET_STREAM)
            .header("content-disposition", "attachment; filename = " + myFile)
            .build();
}

我不知道如何用Mockito或其他方法为它写单元测试。我的测试方法如下,但它不工作。

@Test
public void getMyFile_Success() throws IOException {
    final Client mockClient = Mockito.mock(Client.class);
    final File initialFile = new File("src/test/resources/TestFile.txt");
    final InputStream targetStream =
            new DataInputStream(new FileInputStream(initialFile));
    Mockito.when(mockClient.target("myUrl")
            .request().get(InputStream.class))
            .thenReturn(targetStream);
    Invocation.Builder request = target(CONTEXT_ROOT).request();
    Response response = request.get(Response.class);
    assertThat(response.getStatus()).isEqualTo(Response.Status.OK.getStatusCode());
}
unit-testing mockito jax-rs inputstream
1个回答
0
投票

我成功地用powermock模拟了构造函数以及静态方法,下面是我的代码。

    Client mockClient = Mockito.mock(Client.class); 
    @Before
    public void initMocks() {
        MockitoAnnotations.initMocks(this);
        PowerMockito.mockStatic(ClientBuilder.class);
        PowerMockito.when(ClientBuilder.newClient()).thenReturn(this.mockClient);
    }   

    public void getMyFile_Success() throws Exception {
        Invocation.Builder myBuilder = Mockito.mock(Invocation.Builder.class);
        WebTarget webTarget = Mockito.mock(WebTarget.class);
        Mockito.when(mockClient.target(myUrl)).thenReturn(webTarget);
        Mockito.when(webTarget.request()).thenReturn(myBuilder);
        final File initialFile = new File("src/test/resources/TestFile.txt");
        InputStream targetStream =
                new DataInputStream(new FileInputStream(initialFile));
        Mockito.when(myBuilder
                .get(InputStream.class))
                .thenReturn(targetStream);
        Invocation.Builder request = target(CONTEXT_ROOT).request();
        Response response = request.get(Response.class);
        assertThat(response.getStatus()).isEqualTo(Response.Status.OK.getStatusCode());
    }   
© www.soinside.com 2019 - 2024. All rights reserved.