gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:02:12 33 4
gpt4 key购买 nike

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

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com