单元测试带有嵌入式Jetty的servlet

时间:2013-01-06 05:57:54

标签: unit-testing servlets jetty

我们如何使用嵌入式Jetty服务器对servlet进行单元测试?

例如,如何测试下面的servlet方法?

protected void doGet(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {
    //any logic inside
}

2 个答案:

答案 0 :(得分:16)

我非常喜欢使用类似junit的东西来测试带有嵌入式jetty实例的servlet来引导它。

http://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/tree/examples/embedded/src/main/java/org/eclipse/jetty/embedded/MinimalServlets.java

这是如何做的最小例子。

这也是我们如何测试绝大多数码头本身,启动它并按照它的速度运行它。

对于特定的servlet或处理程序,我们经常在jetty-test-helper工件中使用jetty-client或SimpleRequest。 URLConnection也可以。

http://git.eclipse.org/c/jetty/org.eclipse.jetty.toolchain.git/tree/jetty-test-helper/src/main/java/org/eclipse/jetty/toolchain/test/SimpleRequest.java

这是jetty-client中的测试,它是jetty-9所以如果你想要7或8然后查看相应的标签,它在jetty-9中被重构了很多。

http://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/tree/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientTest.java

注意:我建议您将0作为jetty的端口启动,这将为您提供一个随机打开的端口,然后您可以从jetty中取出用于测试目的,这可以避免运行多个构建的情况CI或并行构建可能存在端口冲突的地方。

答案 1 :(得分:1)

您不需要Jetty来测试servlet,您需要一个单元测试框架,例如JUnit,Mockito,JMock等。

一般来说,当您进行单元测试时,您不希望使用servlet容器,因为您希望将测试集中在正在测试的实际方法上,因为跳槽的方式意味着您还在测试jetty行为。在完成所有单元测试之后,您可以继续进行集成测试和系统测试,该部分可以涉及外部系统,例如jetty(使用自动化框架,如Selenium。)

我使用Mockito和PowerMock进行单元测试,您可以查看this code以获取真实在线服务的实例(您可以找到here)。 我写了一篇关于这项服务及其内容的教程,可以找到here

[在这个答案不时得到downvotes之后添加]:并且有可能获得更多的downvotes,所有你的downvoters需要在单击-1按钮之前阅读UNIT TESTING的定义。你只是不知道你在说什么。