有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在Junit中测试Servlet3.0注释基础servlet和嵌入Tomcat7

我想编写一个junit测试来验证Tomcat7行为,它与Servlet3.0注释(@WebServlet@ServletSecurity)相关

到目前为止,我的测试是:

@Test
public void testDoGet()
     throws ServletException, LifecycleException, IOException {             
  Tomcat tomcat = new Tomcat();        
  tomcat.setPort(8080);        

  Context ctx = tomcat.addWebapp("/", 
     new File("target").getAbsolutePath());             
  Tomcat.addServlet(ctx, "hello", HelloServlet.class.getName());
  ctx.addServletMapping("/hello", "hello");     
  tomcat.start();

  ByteChunk chunk = new ByteChunk();        
  int responceCode = getUrl("http://127.0.0.1:8080/hello",chunk);

  System.out.println(responceCode + ": " + chunk.toString());

  tomcat.stop();
}

这个测试是有效的,但它不考虑注释

很明显,此测试没有考虑HelloServlet上的注释但我不知道如何“注册”servlet,以便使用基于注释的配置。谁能给我一个提示,如何构建一个这样做的测试


共 (2) 个答案

  1. # 1 楼答案

    我不知道这是否解决了问题,但您可以显式地将servlet版本设置为3.0:

    ctx.setEffectiveMajorVersion(3);
    ctx.setEffectiveMinorVersion(0);
    
  2. # 2 楼答案

    我并不完全熟悉Servlet 3.0注释,但我的理解是,您使用@WebServlet标记一个类,并使用@GET@POST等注释一个方法,对吗

    如果是这样,那么我认为servlet类的单元测试不应该涉及任何与上下文、URL路径等相关的内容。如果您的测试是测试这种逻辑,那么您是测试应用程序服务器的代码和逻辑,而不是您自己的类

    @WebServlet的单元测试中,我将坚持测试处理HTTP请求/响应的方法,并断言给定的特定输入(在请求中),servlet将返回预期的输出(在响应中)