我想编写一个 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/