2015-10-05 81 views
1

我想測試一個特定的球衣資源,但球衣客戶端正在返回InboundJaxrsResponse而我期待OutboundJaxrsResponse。我不明白這種行爲。測試澤西REST資源(無效回報響應)

我確實調查過調試器,資源按預期返回OutboundJaxrsResponse,這意味着球衣客戶端正在進行包裝/轉換,但我不明白爲什麼。

如果我沒有做得對,你可以告訴我一個比較響應的好方法。

我正在使用dropwizard。

@Test 
public void itShouldRetrieveListOfComputations() { 

    List<Computation> computations = new ArrayList<Computation>(); 
    computations.add(new Computation("name1", "description1", "expression1")); 
    computations.add(new Computation("name2", "description2", "expression2")); 
    when(computationDAO.findAll()).thenReturn(computations); 

    Response expected = Response.ok(computations).build(); 
    assertThat(resource.client().target("/computations").request().get()).isEqualTo(expected); 

    verify(computationDAO).findAll(); 
} 

資源被測

@GET 
@UnitOfWork 
@Timed 
public Response list() { 

    List<Computation> computations = computationDAO.findAll(); 

    Response response = Response.ok(computations).build(); 
    return response; 
} 

後果

org.junit.ComparisonFailure: 
Expected :OutboundJaxrsResponse{status=200, reason=OK, hasEntity=true, closed=false, buffered=false} 
Actual :InboundJaxrsResponse{context=ClientResponse{method=GET, uri=/computations, status=200, reason=OK}} 

回答

0

Response.ok(computations).build();創建新澤西用來發送給客戶端的輸出響應。您無法真正使用它與來自客戶調用的即將發生的響應進行比較。它們是抽象類的兩種不同的實現。

這是怎麼了,我一般驗證迴應:

Response response = resource.client().target("/computations").request().get(Response.class); 

assertThat(response.getStatusInfo.getFamily()).isEqualTo(Response.Status.Family.Success); 
assertThat(response.getMediaType()).isEqualTo(MediaType.APPLICATION_JSON_TYPE); 
assertThat(response.readEntity(new GenericType<List<Computation>>() {})).isEqualTo(computations);