jersey2单元测试,HttpServletRequest为空 [英] jersey2 Unit testing,HttpServletRequest is null

查看:147
本文介绍了jersey2单元测试,HttpServletRequest为空的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

请大家帮忙吗?

Ask everybody to help?

球衣错误连接:[1]: https://java.net/jira/browse/JERSEY-2412

jersey Bug connection: [1]: https://java.net/jira/browse/JERSEY-2412

当我使用测试提供程序(已测试jetty和grizzly2)时,未将servlet请求,响应和上下文注入到类中. 我使用包批注来启动应用程序.

The servlet request, response and context not injected into the class when I using test provider (tested jetty and grizzly2). I using packages annotation to pull up the application.


您还有其他方法吗?


Do you have any other way?

 public class VMResourceTest extends BaseTest {  

    @Test  
    public void testCreateVm() {  

    String bodyData = loadClassPathData(CLASS_PATH+File.separator+"tools"+File.separator+"createVm.json");  
        Response response = target("/tool/cloud/vrm/fm/ghca_vms").queryParam("platform_id", "A22A4B0C3AEC49F5916EA8CC01F56E9A")  
                    .request().header("X-Auth-GHCA-User-ID", "X-Auth-GHCA-User-ID")  
                    .post(Entity.entity(bodyData, MediaType.APPLICATION_JSON));  
        assertEquals("200", response.getStatus());  
    }  
} 


    public class BaseTest extends JerseyTest{  
       public String CLASS_PATH = "classpath:";  
       public WebTarget target;  
       public Client client;  

      @Override  
      protected Application configure() {  
        enable(TestProperties.LOG_TRAFFIC);  
        enable(TestProperties.DUMP_ENTITY);  
        ResourceConfig rc = new    ResourceConfig().packages("com.ghca.easyview.server.api.resource");  
        rc.register(SpringLifecycleListener.class);  
        rc.register(RequestContextListener.class);  

        rc.property("contextConfigLocation", "classpath:spring/spring-config.xml");  
        return rc;  
    }  



        public String loadClassPathData(String classFilePath){  
           File schemaContextFile = null;  
           String result = "";  
        try {  
            schemaContextFile = readSchemaFile(classFilePath);  
            BufferedReader br = new BufferedReader(new  FileReader(schemaContextFile));
            String s = null;  
            while((s = br.readLine())!=null){ 
                result = result + "\n" +s;  
            }  
            br.close();      
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
        return result;  
    }  
    }


    @Component  
    @Path("tool/cloud/vrm")  
    public class VMResource extends BaseResource{  

    @Autowired  
    private VMService vmService;  

    @Context  
    public HttpServletRequest request;  
    @Context  
    public HttpServletResponse response;  


    @POST  
    @Path("{platform_type}/ghca_vms")  
    @Consumes({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML})  
    @Produces({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML})  
    public Response createVm(@PathParam("platform_type") String platformType,  
            @QueryParam("platform_id") String platformId) {}  

请求和响应为空.

推荐答案

您需要为Servlet环境配置JerseyTest.在您的JerseyTest中,您应该有类似

You need to configure the JerseyTest for a Servlet environment. In your JerseyTest, you should have something like

@Override
protected TestContainerFactory getTestContainerFactory() {
    return new GrizzlyWebTestContainerFactory();
}

@Override
protected DeploymentContext configureDeployment() {
    ResourceConfig config = new ResourceConfig(SessionResource.class);
    return ServletDeploymentContext.forServlet(
                             new ServletContainer(config)).build();
}

如果您查看ServletDeploymentContext.forServlet,它将返回 ServletDeploymentContext.Builder .如果您查看Javadoc,将会看到一些熟悉的方法,例如initParam(...,...)addListener等.这就像以编程方式构建web.xml一样.只需保留链接方法,然后构建即可.

If you look at the ServletDeploymentContext.forServlet, it returns a ServletDeploymentContext.Builder. If you look at the Javadoc, you will see some familiar looking methods, like initParam(...,...), addListener, etc. This is just like building your web.xml programmatically. Just keep chaining methods, then build.

使用上述配置,您不再需要覆盖JerseyTest中的configure方法.只需添加如上所示的ResourceConfig.

With the above configuration, you no longer need to override the configure method in the JerseyTest. Just add the ResourceConfig like seen above.

请参阅其他测试示例另请参阅相关内容:

这篇关于jersey2单元测试,HttpServletRequest为空的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆