我在这方面没有看到任何我会推荐给客户的东西。如果您使用过 Spring PortletMVC,您是如何测试它的?
在portlet代码级别下测试很容易,通过HtmlUnit、Selenium等在客户端测试也比较容易,但是我还没有看到什么是JSFUnit精神的“灰盒”测试(在我看来是前进的方向)。
- Apache 的Pluto驱动程序理论上可用于引导测试工具。有没有人试过这个?
- 任何存根或数据提供者方法?
- 有什么方法可以解决两阶段处理问题?
我在这方面没有看到任何我会推荐给客户的东西。如果您使用过 Spring PortletMVC,您是如何测试它的?
在portlet代码级别下测试很容易,通过HtmlUnit、Selenium等在客户端测试也比较容易,但是我还没有看到什么是JSFUnit精神的“灰盒”测试(在我看来是前进的方向)。
我对portlet 一无所知,但它就在这里。
portletUnit 是一个测试框架,用于在 portlet 容器外部测试 JSR-168 portlet,就像 servletUnit 用于在 servlet 容器外部测试 servlet。计划的架构是将 servletUnit 的功能映射到 portlet 上,而 servletUnit 本身为 portletUnit 提供了基础。
更多相关信息可以在他的Project PortletUnit 博客中找到,包括PortletUnit 和 Spring Portlet:检查表单验证错误。
使用 portletUnit 进行测试时,如何检查是否有任何表单错误并不明显。幸运的是,使用 的渲染侦听器功能
PortletRunner
,有一种简单的方法可以检查验证器错误。
还有一篇 Nils-Helge Garli Hegvik 在 2007 年撰写的博客文章,标题为使用 Jetty、Pluto 和 JWebUnit 测试 Portlets。
想起 Johannes Brodwall 的博客中一篇关于使用 Jetty 和 JWebUnit 进行集成测试的优秀文章,我想扩展他的方法以使用我创建的嵌入式 jetty-pluto 设置。事实证明这很容易。
最后,Spring Framework 文档10.2 单元测试。
该
org.springframework.mock.web.portlet
包包含一组 Portlet API 模拟对象,旨在与 Spring 的 Portlet MVC 框架一起使用。[...]
org.springframework.test.web
包包含ModelAndViewAssert
,它可以与任何测试框架(例如,JUnit 4+、TestNG 等)结合使用,用于处理 Spring MVCModelAndView
对象的单元测试。[...] 要测试您的 Spring MVC 控制器, 请
ModelAndViewAssert
结合 使用 .MockHttpServletRequest
MockHttpSession
org.springframework.mock.web package
这是 John Ferguson Smart 撰写的一篇相关文章,标题为 Unit testing your Spring-MVC applications。
这个框架的一大优点是它的可测试性。在 Spring-MVC 中,任何自定义验证器(用于字段和表单验证)和属性编辑器(用于将文本字段转换为特定 Java 类型)都非常容易测试——您可以像在隔离 POJO 一样测试它们。
Spring-MVC 还附带了一整套模拟对象,您可以使用它们(通过一些练习)来测试您的控制器是否符合您的要求。例如,您可以使用 和 之类的类
MockHttpServletRequest
来MockHttpServletResponse
模拟您的 HTTP 请求和响应对象。Controller
s 可以被实例化为普通的 Java 类,这也使得这一点变得更容易。例如,假设您正在测试更新客户详细信息记录的页面的控制器类。您可以非常简单地执行此操作,如下所示:
public class UpdateClientTest {
//
// Prepare your request
//
request.setMethod("POST");
request.setParameter("id", "100");
request.setParameter("firstName", "Jane");
request.setParameter("lastName", "Doe");
//
// Invoke the controller
//
controller = new ChoosePeriodController();
ModelAndView mav = controller.handleRequest(request, response);
//
// Inject any service objects you need
//
controller.setClientService(clientService);
...
//
// Inspect the results
//
assert mav != null;
assertEquals("displayClient",mav.getViewName());
Client client = (Client) mav.getModel().get("client");
assertEquals("Jane",client.getFirstName());
assertEquals("Doe",client.getLastName());
...
}
...
签出 spring-test-portlet-mvc ( https://github.com/markusf/spring-test-portlet-mvc ),它将 MockMvc 的特性暴露给 Portal 上下文,让您轻松集成测试 Spring Portlet。