Java RestEasy:如何验证ClientResponse主体?
我有一个Java RestEasy:如何验证ClientResponse主体?,java,rest,testing,resteasy,Java,Rest,Testing,Resteasy,我有一个REST端点作为 @GET @Produces(MediaType.APPLICATION_JSON) public Response getVariables(@QueryParam("_activeonly") @DefaultValue("no") @Nonnull final Active active) { switch(active){ case yes: return Response.ok(VariablePresentation.
REST
端点作为
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getVariables(@QueryParam("_activeonly") @DefaultValue("no") @Nonnull final Active active) {
switch(active){
case yes:
return Response.ok(VariablePresentation.getPresentationVariables(variableManager.getActiveVariables())).build();
case no:
return Response.ok(VariablePresentation.getPresentationVariables(variableManager.getVariables())).build();
}
throw new WebApplicationException(Response.Status.BAD_REQUEST);
}
它返回variablempresentation
的List
的JSON
。variablePresentation
看起来像
@XmlRootElement
public class VariablePresentation {
private final UUID id;
private final String name;
private final VariableType type;
public VariablePresentation(@Nonnull final Variable variable) {
id = variable.getId();
name = variable.getName();
type = variable.getType();
}
public String getId() {
return id.toString();
}
@Nonnull
public String getName() {
return name;
}
@Nonnull
public VariableType getType() {
return type;
}
用JAXB
的XmlRoot
注释以返回JSON
。
我的集成测试如下
@Test
public void testGetAllVariablesWithoutQueryParamPass() throws Exception {
final ClientRequest clientCreateRequest = new ClientRequest("http://localhost:9090/variables");
final MultivaluedMap<String, String> formParameters = clientCreateRequest.getFormParameters();
final String name = "testGetAllVariablesWithoutQueryParamPass";
formParameters.putSingle("name", name);
formParameters.putSingle("type", "String");
formParameters.putSingle("units", "units");
formParameters.putSingle("description", "description");
formParameters.putSingle("core", "true");
final ClientResponse<String> clientCreateResponse = clientCreateRequest.post(String.class);
assertEquals(201, clientCreateResponse.getStatus());
}
它以不同的错误失败
testGetAllVariablesWithoutQueryParamPass(com.myorg.project.market.integration.TestVariable): Unable to find a MessageBodyReader of content-type application/json and type java.util.List<com.myorg.project.service.presentation.VariablePresentation>
testGetAllVariablesWithoutQueryParamPass(com.myorg.project.market.integration.TestVariable):找不到内容类型为application/json、类型为java.util.List的MessageBodyReader
如何解决此问题?我发现最简单的方法是将ClientResponse与 一个简单的例子可以是
@Test
public void testGetAllVariablesWithoutQueryParamNoPass() throws Exception {
final ClientRequest clientCreateRequest_var0 = new ClientRequest("http://localhost:9090/variables?_activeonly=no");
final MultivaluedMap<String, String> formParameters = clientCreateRequest_var0.getFormParameters();
final String name0 = "testGetAllVariablesWithoutQueryParamNoPass_0";
formParameters.putSingle("name", name0);
formParameters.putSingle("type", "String");
formParameters.putSingle("units", "units");
formParameters.putSingle("description", "description");
formParameters.putSingle("core", "true");
final ClientResponse<String> clientCreateResponse_var0 = clientCreateRequest_var0.post(String.class);
assertEquals(201, clientCreateResponse_var0.getStatus());
final ClientRequest clientCreateRequest_var1 = new ClientRequest("http://localhost:9090/variables");
final MultivaluedMap<String, String> formParameters1 = clientCreateRequest_var1.getFormParameters();
final String name1 = "testGetAllVariablesWithoutQueryParamNoPass_1";
formParameters1.putSingle("name", name1);
formParameters1.putSingle("type", "String");
formParameters1.putSingle("units", "units");
formParameters1.putSingle("description", "description");
formParameters1.putSingle("core", "true");
final ClientResponse<String> clientCreateResponse_var1 = clientCreateRequest_var1.post(String.class);
assertEquals(201, clientCreateResponse_var1.getStatus());
final ClientRequest clientCreateRequest2 = new ClientRequest("http://localhost:9090/variables");
final ClientResponse<String> clientCreateResponse2 = clientCreateRequest2.get(String.class);
final Gson gson = new Gson();
final Type variableType = new TypeToken<List<VariablePresentation>>() {
}.getType();
List<VariablePresentation> variables = gson.fromJson(clientCreateResponse2.getEntity(), variableType);
assertNotNull(variables);
assertEquals(2, variables.size());
// clean test data
removeTestDataVariableObject(name0);
removeTestDataVariableObject(name1);
}
@测试
public void testGetAllVariablesWithoutQueryParamNoPass()引发异常{
最终ClientRequest clientCreateRequest_var0=新ClientRequest(“http://localhost:9090/variables?_activeonly=no");
最终多值Map formParameters=clientCreateRequest_var0.getFormParameters();
最终字符串名称0=“testGetAllVariablesWithoutQueryParamNoPass\u 0”;
formParameters.putSingle(“名称”,name0);
formParameters.putSingle(“类型”、“字符串”);
formParameters.putSingle(“单位”、“单位”);
formParameters.putSingle(“说明”、“说明”);
formParameters.putSingle(“核心”、“真实”);
final ClientResponse clientCreateResponse_var0=clientCreateRequest_var0.post(String.class);
assertEquals(201,clientCreateResponse_var0.getStatus());
最终ClientRequest clientCreateRequest_var1=新ClientRequest(“http://localhost:9090/variables");
最终多值Map formParameters1=clientCreateRequest_var1.getFormParameters();
最终字符串名称1=“testGetAllVariablesWithoutQueryParamNoPass_1”;
formParameters1.putSingle(“名称”,名称1);
formParameters1.putSingle(“类型”、“字符串”);
formParameters1.putSingle(“单位”、“单位”);
formParameters1.putSingle(“说明”、“说明”);
formParameters1.putSingle(“核心”、“真”);
final ClientResponse clientCreateResponse_var1=clientCreateRequest_var1.post(String.class);
assertEquals(201,clientCreateResponse_var1.getStatus());
最终ClientRequest clientCreateRequest2=新ClientRequest(“http://localhost:9090/variables");
final ClientResponse clientCreateResponse2=clientCreateRequest2.get(String.class);
最终Gson Gson=新Gson();
最终类型variableType=新类型令牌(){
}.getType();
List variables=gson.fromJson(clientCreateResponse2.getEntity(),variableType);
assertNotNull(变量);
assertEquals(2,variables.size());
//清洁测试数据
removeTestDataVariableObject(name0);
removeTestDataVariableObject(名称1);
}
@Test
public void testGetAllVariablesWithoutQueryParamNoPass() throws Exception {
final ClientRequest clientCreateRequest_var0 = new ClientRequest("http://localhost:9090/variables?_activeonly=no");
final MultivaluedMap<String, String> formParameters = clientCreateRequest_var0.getFormParameters();
final String name0 = "testGetAllVariablesWithoutQueryParamNoPass_0";
formParameters.putSingle("name", name0);
formParameters.putSingle("type", "String");
formParameters.putSingle("units", "units");
formParameters.putSingle("description", "description");
formParameters.putSingle("core", "true");
final ClientResponse<String> clientCreateResponse_var0 = clientCreateRequest_var0.post(String.class);
assertEquals(201, clientCreateResponse_var0.getStatus());
final ClientRequest clientCreateRequest_var1 = new ClientRequest("http://localhost:9090/variables");
final MultivaluedMap<String, String> formParameters1 = clientCreateRequest_var1.getFormParameters();
final String name1 = "testGetAllVariablesWithoutQueryParamNoPass_1";
formParameters1.putSingle("name", name1);
formParameters1.putSingle("type", "String");
formParameters1.putSingle("units", "units");
formParameters1.putSingle("description", "description");
formParameters1.putSingle("core", "true");
final ClientResponse<String> clientCreateResponse_var1 = clientCreateRequest_var1.post(String.class);
assertEquals(201, clientCreateResponse_var1.getStatus());
final ClientRequest clientCreateRequest2 = new ClientRequest("http://localhost:9090/variables");
final ClientResponse<String> clientCreateResponse2 = clientCreateRequest2.get(String.class);
final Gson gson = new Gson();
final Type variableType = new TypeToken<List<VariablePresentation>>() {
}.getType();
List<VariablePresentation> variables = gson.fromJson(clientCreateResponse2.getEntity(), variableType);
assertNotNull(variables);
assertEquals(2, variables.size());
// clean test data
removeTestDataVariableObject(name0);
removeTestDataVariableObject(name1);
}