@WebAppConfiguration 如何在没有 servlet 或应用程序容器的情况下工作?
How @WebAppConfiguration works without servlet or application container?
我正在使用 spring 4 和 testng。当我根本没有安装像 tomcat 这样的 servlet 容器时,@WebAppConfiguration 如何正确加载 WebApplicationContext 和 servlet。在这种情况下是否可以通过 url 访问 servlet 还是必须安装 Web 服务器?
您不需要安装真正的 servlet 容器。您可以认为 @WebAppConfiguration
创建的 servlet 容器只是一个伪造的基于 in-memory 的 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。
我正在使用 spring 4 和 testng。当我根本没有安装像 tomcat 这样的 servlet 容器时,@WebAppConfiguration 如何正确加载 WebApplicationContext 和 servlet。在这种情况下是否可以通过 url 访问 servlet 还是必须安装 Web 服务器?
您不需要安装真正的 servlet 容器。您可以认为 @WebAppConfiguration
创建的 servlet 容器只是一个伪造的基于 in-memory 的 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。