【发布时间】:2019-11-17 01:39:41
【问题描述】:
我正在使用 spring 4 和 testng。当我根本没有安装像 tomcat 这样的 servlet 容器时,@WebAppConfiguration 如何正确加载 WebApplicationContext 和 servlet。在这种情况下是否可以通过 url 访问 servlet 还是必须安装 web 服务器?
【问题讨论】:
标签: spring-test
我正在使用 spring 4 和 testng。当我根本没有安装像 tomcat 这样的 servlet 容器时,@WebAppConfiguration 如何正确加载 WebApplicationContext 和 servlet。在这种情况下是否可以通过 url 访问 servlet 还是必须安装 web 服务器?
【问题讨论】:
标签: spring-test
您不需要安装真正的 servlet 容器。你可以认为@WebAppConfiguration创建的servlet容器只是一个假的、基于内存的servlet容器,而不是像Tomcat这样的真实容器。它只能通过以编程方式调用其方法来工作,而不能通过 URL 调用。
这个假Servlet容器的实际实现包括MockServletContext、MockHttpServletRequest、MockHttpServletResponse、MockHttpSession和MockServletConfig等......
想法是为了测试一个HttpServlet,我们首先通过设置MockHttpServletRequest的相关状态来配置HTTP请求,然后以编程方式调用被测试的HttpServlet,并从MockHttpServletResponse验证结果:
@ContextConfiguration
@WebAppConfiguration
public class FooServletTest {
@Autowired MockHttpServletRequest request;
@Autowired MockHttpServletResponse response;
@Test
public void test1(){
request.setParameter("user", "enigma");
//blablab.
FooServlet sut = new FooServlet();
sut.doGet(request, response);
//Then assert the response is correct by checking its status
}
}
更多详情请见docs。
【讨论】: