java - 如何在 Junit 中使用嵌入式 Tomcat 7 测试基于 servlet 3.0 注释的 servlet

标签 java unit-testing tomcat servlets

我想编写一个 junit 测试来验证与 Servlet 3.0 注释(@WebServlet@ServletSecurity)相关的 tomcat 7 行为。

到目前为止我有这个测试:

@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,以便使用其基于注释的配置。任何人都可以提示我如何构建执行此操作的测试吗?

最佳答案

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

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

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

关于java - 如何在 Junit 中使用嵌入式 Tomcat 7 测试基于 servlet 3.0 注释的 servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5298640/

相关文章:

java - 如何在 JPanel 中的两个组件之间创建空间

AngularJS单元测试: Constructor Test: Windows Azure Invoke Api

java - 与 Tomcat 的 WebSphere MQ 连接池

Tomcat服务器IP地址限制方法?

java - Rust 与 Java 静态方法以及泛型类型参数的调用

java - 为什么 CustomProjectAggregationOperation 在 SpringMongoTemplate 中不起作用

c# - Moq 是单元测试的代理

java - Tomcat:当 HTTP Multipart 请求被中断时会发生什么?

java - 在带有 Spring 3.2 的 Hibernate 4 上使用 sessionfactory 时出现空指针错误

c# - 在 Winforms 中使用 IoC 时如何不绕过容器