gpt4 book ai didi

java - dropwizard 中的单元测试 View

转载 作者:行者123 更新时间:2023-11-30 07:18:03 25 4
gpt4 key购买 nike

我正在尝试测试从 drowpizard 资源返回的 View 是否正确组装。具体来说,添加用户的 View 有一个字段,允许密码检查器在不满足某些规则时拒绝尝试建立用户。该 View 在部署和运行 web 应用程序并指定错误密码时运行良好,但当我尝试对其进行单元测试时,它抛出一个 web 应用程序异常,指出该 View 没有消息正文编写器。

我的单元测试非常简单:

@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)

处理请求并生成 View 和响应的资源如下所示:

@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,不为响应或 View 或其他东西工作)但我更想知道如何正确测试可以返回的资源响应代码或 View 。

最佳答案

您需要将 addProvider(ViewMessageBodyWriter.class); 添加到您的 setUpResources

ViewMessageBodyWriterViewBundle 添加为提供者,这就是它在您的服务中工作的原因(您可能有 bootstrap.addBundle(new ViewBundle() );).

关于java - dropwizard 中的单元测试 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15691968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com