我想编写一个junit测试来验证tomcat 7的行为,它与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,以便使用基于注释的配置。有人能给我一个提示吗?如何构建一个这样的测试?
发布于 2011-03-14 13:19:32
我并不完全熟悉Servlet3.0注释,但我的理解是,您用@WebServlet标记类,用@GET、@POST等对方法进行注释,对吗?
如果是,那么我认为servlet类的单元测试不应该涉及与上下文、URL路径等相关的任何内容。如果您的测试正在测试此逻辑,那么您将测试应用程序服务器的代码和逻辑,而不是您自己的类。
在@WebServlet的单元测试中,我将坚持测试处理HTTP /response的方法,并断言给定特定的输入(在请求中),servlet返回预期的输出(在响应中)。
发布于 2011-03-14 12:56:05
我不知道这是否解决了问题,但是可以显式地将servlet版本设置为3.0:
ctx.setEffectiveMajorVersion(3);
ctx.setEffectiveMinorVersion(0);https://stackoverflow.com/questions/5298640
复制相似问题