我们如何使用嵌入式Jetty服务器对servlet进行单元测试?
例如,如何测试下面的servlet方法?
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
//any logic inside
}
答案 0 :(得分:16)
我非常喜欢使用类似junit的东西来测试带有嵌入式jetty实例的servlet来引导它。
这是如何做的最小例子。
这也是我们如何测试绝大多数码头本身,启动它并按照它的速度运行它。
对于特定的servlet或处理程序,我们经常在jetty-test-helper工件中使用jetty-client或SimpleRequest。 URLConnection也可以。
这是jetty-client中的测试,它是jetty-9所以如果你想要7或8然后查看相应的标签,它在jetty-9中被重构了很多。
注意:我建议您将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的定义。你只是不知道你在说什么。