Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java dropwizard中的单元测试视图_Java_Unit Testing_Dropwizard - Fatal编程技术网

Java dropwizard中的单元测试视图

Java dropwizard中的单元测试视图,java,unit-testing,dropwizard,Java,Unit Testing,Dropwizard,我试图测试drowpizard资源返回的视图是否正确组装。具体来说,添加用户的视图有一个字段,允许密码检查器在无法满足某些规则时拒绝生成用户的尝试。当部署和运行webapp并指定错误的密码时,该视图非常有效,但是当我尝试对其进行单元测试时,它抛出一个web应用程序异常,表示该视图没有消息体编写器 我的单元测试非常简单: @Test public void testBadPassword(){ ClientResponse response = null; try {

我试图测试drowpizard资源返回的视图是否正确组装。具体来说,添加用户的视图有一个字段,允许密码检查器在无法满足某些规则时拒绝生成用户的尝试。当部署和运行webapp并指定错误的密码时,该视图非常有效,但是当我尝试对其进行单元测试时,它抛出一个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);
    }

    // ...
}
@Path(“/users”)
公共类用户资源{
公共对象addUser(@FormParam(“用户名”)字符串用户名,
@FormParam(“密码”)字符串密码,
@FormParam(“电子邮件”)字符串(电子邮件){
设置passwordErrors=passwordChecker.checkValidity(密码、用户名、电子邮件);
如果(!passwordErrors.isEmpty()){
返回新的AddUserView(userDAO.getAllActive(),passwordErrors);
}
// ...
}

我可以理解异常(它知道的编写器,如StringProvider和ByteArrayProvider,不适用于响应或视图等),但我更想知道如何正确测试可以返回响应代码或视图的资源。

您需要添加
addProvider(ViewMessageBodyWriter.class);
到您的
设置资源


ViewMessageBodyWriter
是由
ViewBundle
添加为提供者的,这就是它在您的服务中起作用的原因(您可能有
bootstrap.addBundle(新的ViewBundle();
)。

您需要将
添加提供者(ViewMessageBodyWriter.class);
添加到
设置资源中


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

我正在使用dropwizard 0.8.0-rc3,我的视图是基于freemarker模板的。我尝试了上述方法并不断得到异常。最终让它对我起作用的是调用

.addProvider(new ViewMessageBodyWriter(new MetricRegistry(), Collections.singleton(new FreemarkerViewRenderer())))

在我的
ResourceTestRule.builder()
上,我使用dropwizard 0.8.0-rc3,我的视图是基于freemarker模板的。我尝试了上述方法并不断得到异常。最终让它对我起作用的是调用

.addProvider(new ViewMessageBodyWriter(new MetricRegistry(), Collections.singleton(new FreemarkerViewRenderer())))

在我的
ResourceTestRule.builder()上

谢谢,修复了这个异常。我现在遇到了一个类似的异常,关于没有消息正文阅读器,通过查看捆绑包,似乎没有类似的异常。是否需要添加其他提供者,或者需要提供某种注释,以使单元测试正常工作?看起来Coda已经修复了您:谢谢,这修复了该异常。我现在遇到了一个类似的异常,关于没有消息正文阅读器,通过查看捆绑包,似乎没有类似的异常。是否需要添加其他提供程序,或者需要提供某种注释,以使单元测试正常工作?看起来Coda已经修复了您: