4

我在这方面没有看到任何我会推荐给客户的东西。如果您使用过 Spring PortletMVC,您是如何测试它的?

在portlet代码级别下测试很容易,通过HtmlUnit、Selenium等在客户端测试也比较容易,但是我还没有看到什么是JSFUnit精神的“灰盒”测试(在我看来是前进的方向)。

  • Apache 的Pluto驱动程序理论上可用于引导测试工具。有没有人试过这个?
  • 任何存根或数据提供者方法?
  • 有什么方法可以解决两阶段处理问题?
4

2 回答 2

6

我对portlet 一无所知,但它就在这里。

portletUnit

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结合 使用 .MockHttpServletRequestMockHttpSessionorg.springframework.mock.web package

这是 John Ferguson Smart 撰写的一篇相关文章,标题为 Unit testing your Spring-MVC applications

这个框架的一大优点是它的可测试性。在 Spring-MVC 中,任何自定义验证器(用于字段和表单验证)和属性编辑器(用于将文本字段转换为特定 Java 类型)都非常容易测试——您可以像在隔离 POJO 一样测试它们。

Spring-MVC 还附带了一整套模拟对象,您可以使用它们(通过一些练习)来测试您的控制器是否符合您的要求。例如,您可以使用 和 之类的类 MockHttpServletRequestMockHttpServletResponse模拟您的 HTTP 请求和响应对象。Controllers 可以被实例化为普通的 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());  
    ...        
    }
    ...
于 2009-06-15T06:44:10.123 回答
0

签出 spring-test-portlet-mvc ( https://github.com/markusf/spring-test-portlet-mvc ),它将 MockMvc 的特性暴露给 Portal 上下文,让您轻松集成测试 Spring Portlet。

于 2014-11-01T19:43:21.463 回答