是否有可用的符合标准(168/286)的portlet测试框架?(特别是与Spring PortletMVC一起使用的)

cwa*_*ash 3 spring portal unit-testing

我没有在这个领域看到任何我推荐给客户的东西.如果你使用过Spring PortletMVC,你是如何测试它的?

在portlet代码级别下测试很容易,并且通过HtmlUnit,Selenium等在客户端测试相对容易,但我没有看到任何与JSFUnit精神相关的"灰盒子"测试(其中期待我前进的方向).

  • 从理论上讲,Apache的Pluto驱动程序可用于引导测试工具.有没人试过这个?
  • 任何存根或数据提供者接近?
  • 解决两阶段处理问题的方法有哪些?

Eug*_*ota 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测试Portlet.

记得约翰内斯布罗德沃尔博客关于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 MVC ModelAndView对象的单元测试.

[...]要测试你的Spring MVC控制器,使用 ModelAndViewAssert结合 MockHttpServletRequest, MockHttpSession从等 org.springframework.mock.web package.

这是John Ferguson Smart撰写的一篇相关文章,名为 Unit测试你的Spring-MVC应用程序.

这个框架的一大优点是它是多么可测试.在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());  
    ...        
    }
    ...
Run Code Online (Sandbox Code Playgroud)