PHP前端控制器库,支持单元测试

cwe*_*ske 12 php model-view-controller phpunit frameworks controller

我正在寻找一个(小)库,帮助我干净地为我的宠物项目实现一个前端控制器,并将请求分派给单个控制器类.前端控制器/调度程序和控制器类需要完全unittestable而不发送HTTP请求.

要求

  • PSR-0兼容
  • 可通过自己的PEAR渠道安装
  • 支持单元测试:
    • 检查是否发送了正确的HTTP标头
    • 捕获输出以允许在单元测试中进行检查
    • 优选PHPUnit帮助器方法来帮助检查输出(对于不同的输出类型,即HTML,XML,JSON)
    • 允许设置传入的HTTP标头,GET和POST参数以及cookie,而无需实际执行HTTP请求
  • 需要独立使用 - 没有db抽象,模板化以及所有胖框架都提供

背景

SemanticScuttle是一个必须获得适当"C"支持的应用程序,它是一个现有的工作应用程序.库需要融入其中,并且需要使用现有的结构和类.我不会重写它以匹配框架的特定所需目录布局.

该应用程序已经具有单元测试,但基于HTTP请求,这使得它们变慢.此外,目前.phpwww目录中拥有几十个文件的旧方法并不是最容易管理的解决方案,这就是为什么需要引入适当的控制器类的原因.总而言之,将有大约20-30个控制器.

以往的经验

总的来说,我对以前的一些项目使用Zend Framework非常满意,但它有几个缺点:

  • 不是可以安装的,所以我不能在我的pear-installble应用程序中使用它作为依赖项
  • 只能作为一个胖下载,所以我手动需要从中提取所需的位 - 为每个单独的ZF更新.
  • 虽然ZF控制器存在单元测试支持,但它缺少一些高级实用功能,如json的断言,HTTP状态代码和内容类型检查.

虽然这些点似乎是挑剔,但它们对我来说很重要.如果我必须自己实现它们,我不需要使用外部库,而是编写自己的库.

我不想要的

StackOverflow上有一个亿"什么是最好的PHP框架"的问题(1,2,3,4,5),但我不找那些但是对于一个特定的库,与控制器的帮助.如果它是模块化框架的一部分,那很好.

我也知道PHP框架比较网站,但它没有帮助回答我的问题,因为我的要求没有在那里列出.

而且我知道我可以自己构建这一切并发明另一个微框架.但为什么?已经有这么多了,而且只需拥有我需要的一切.

相关问题

Sel*_*aek 7

很了解Symfony2,我可以向你保证,它绝对可以仅用于MVC中的"C".模型和模板完全免费,并且通常从控制器执行,因此如果您没有专门调用Doctrine或Twig,您可以执行您想要的操作.

至于功能测试,这正是你在文章中所讨论的,你想要看的是WebTestCase类,它可以通过LiipFunctionalTestBundle包进行更好的补充,获得更高级的案例.

这允许一些事情,例如测试发送电子邮件的联系表单的示例,其中整个HTTP请求在进程中完成,因为编写框架以允许每个进程多个请求并且没有全局状态,这非常有效并且不需要运行http服务器或任何东西.正如您所看到的,我也对响应的HTTP状态代码进行了断言,并且能够在不发送电子邮件的情况下捕获电子邮件,因为在测试配置中,在Symfony2的标准发行版中禁用了电子邮件发送.

话虽这么说,你也可以使用Symfony2的HttpFoundation组件中的Request和Response类.它应该允许您测试您的代码,但IMO如果您使用整个框架,您将无法获得尽可能多的好功能.当然那只是我的偏见;)