我正在尝试测试从drowpizard 资源返回的视图是否正确组装。具体来说,添加用户的视图有一个字段,如果密码检查器不符合某些规则,则该字段允许密码检查器拒绝创建用户的尝试。该视图在部署和运行 web 应用程序并指定错误密码时效果很好,但是当我尝试对其进行单元测试时,它会引发一个 web 应用程序异常,指出视图没有消息正文编写器。
我的单元测试很简单:
@Test
public void testBadPassword(){
ClientResponse response = null;
try {
response=client().resource("/users").post(ClientResponse.class, createUserParameters);
Status status = response.getClientResponseStatus();
assertEquals(Status.SEE_OTHER, status);
} finally {
if (response != null) {
response.close();
}
}
}
我得到一个服务器 500 错误,它隐藏在以下内容中:
javax.ws.rs.WebApplicationException: com.sun.jersey.api.MessageException: A message body writer for Java class com.seeker.stm.resources.views.AddUserView, and Java type class com.seeker.stm.resources.views.AddUserView, and MIME media type text/html was not found
at com.sun.jersey.spi.container.ContainerResponse.write(ContainerResponse.java:285)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1448)
处理请求并生成视图和响应的资源如下所示:
@Path("/users")
public class UserResource {
public Object addUser(@FormParam("username") String username,
@FormParam("password") String password,
@FormParam("email") String email){
Set<String> passwordErrors = passwordChecker.checkValidity(password, username, email);
if (!passwordErrors.isEmpty()) {
return new AddUserView(userDAO.getAllActive(), passwordErrors);
}
// ...
}
我可以理解异常(它知道的编写器,如 StringProvider 和 ByteArrayProvider,不适用于响应或视图或其他东西)但我更想知道如何正确测试可以返回响应的资源代码或视图。