支持单元测试的 PHP 前端 Controller 库

标签 php model-view-controller frameworks controller phpunit

我正在寻找一个(小型)库来帮助我干净地实现 front controller对于我的pet project并将请求分派(dispatch)给单个 Controller 类。前端 Controller /调度程序和 Controller 类需要完全可单元测试,而无需发送 HTTP 请求。

要求

  • PSR-0兼容
  • 可通过其自己安装PEAR channel
  • 支持单元测试:
    • 检查是否发送了正确的 HTTP header
    • 捕获输出以允许在单元测试中进行检查
    • 最好是 PHPUnit 辅助方法来帮助检查输出(针对不同的输出类型,即 HTML、XML、JSON)
    • 允许设置传入的 HTTP header 、GET 和 POST 参数以及 Cookie,而无需实际执行 HTTP 请求
  • 需要独立使用 - 没有数据库抽象、模板等,以便胖框架都提供

背景

SemanticScuttle 是一个现有的、正在运行的应用程序,它必然会获得适当的“C”支持。库需要融入其中,并且需要与现有的结构和类一起工作。我不会重写它来匹配框架的特定所需目录布局。

应用程序已经有单元测试,但基于 HTTP 请求,这使得它们很慢。此外,当前在 www 目录中包含数十个 .php 文件的旧方法并不是最易于管理的解决方案,这就是为什么需要引入适当的 Controller 类。总共大约有20-30个 Controller 。

以前的经验

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

  • 不可进行 pear 安装,因此我无法将其用作可安装 pear 的应用程序中的依赖项
  • 仅作为一个胖下载提供,因此我需要手动从中提取所需的位 - 对于每个 ZF 更新。
  • 虽然 ZF Controller 提供单元测试支持,但缺乏一些高级实用功能,例如 json 断言、HTTP 状态代码和内容类型检查。

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

我不想要什么

StackOverflow 有一百万个“什么是最好的 PHP 框架”问题( 12345 ),但我不是在寻找这些问题,而是在寻找 特定有助于 Controller 的库。如果它是模块化框架的一部分,那就好。

我也知道PHP framework comparison website ,但这无助于回答我的问题,因为那里没有列出我的要求。

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

相关问题

最佳答案

非常了解 Symfony2,我可以向您保证,绝对可以将它仅用于 MVC 中的“C”。模型和模板是完全免费的,并且通常都是从 Controller 执行的,所以如果您不专门调用 Doctrine 或 Twig,您可以做您想做的事情。

至于功能测试,这实际上是您在文章中讨论的内容,您想要查看的是 WebTestCase 类,the LiipFunctionalTestBundle bundle 很好地补充了它。对于更高级的案例。

这允许一些事情,比如 testing a contact form that sends an email 的例子,整个 HTTP 请求都是在进程中完成的,因为框架的编写允许每个进程多个请求并且没有全局状态,所以这种方法工作得很好,不需要运行 http 服务器或任何东西。正如您所看到的,我也对响应的 HTTP 状态代码进行了断言,并且能够捕获电子邮件而不发送它,因为在测试配置 sending of emails is disabled 中在 Symfony2 的标准发行版中。

话虽这么说,您也可以使用 Symfony2 的 HttpFoundation 中的 Request 和 Response 类。成分。它应该允许您测试您的代码,但在我看来,如果您使用整个框架,您将无法获得尽可能多的优秀功能。当然这只是我的偏见;)

关于支持单元测试的 PHP 前端 Controller 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6274992/

相关文章:

php - 如何在 php 数组中的每个对象中添加一个新的键值对?

PHP 获取远程文件 mime 类型

Java2EE总是使用MVC2架构?

javascript - 高性能网站通常使用哪种 JavaScript 框架?

ruby-on-rails - 我们可以将 RubyOnRails 用于银行和金融交易领域吗

php - MySQL PHP 表更新/POST 不工作

php - 在 wordpress css html 中调整图像大小

php - ORM 中的对象是否应该包含 CRUD 以外的操作?

asp.net-mvc - MVC 表单提交按钮将有条件地具有 OnClick 事件

swift - 只有特定的包标识符找不到框架错误