【问题标题】:Testing models and services with Laravel, PHPSpec and PHPUnit使用 Laravel、PHPSpec 和 PHPUnit 测试模型和服务
【发布时间】:2015-02-18 16:10:14
【问题描述】:

我很难决定或理解在 Laravel 中进行测试的最佳方法。

我真的很喜欢 PHPSpec 测试的行为方面,尽管它与测试 Eloquent 模型或任何与活动记录 ORM 相关的东西不兼容。

当测试服务提供者 PHPSpec 之类的东西时,似乎是要走的路。

** 是否需要用 PHPUnit 之类的东西测试模型,然后用 PHPSpec 之类的东西测试其他非 ORM 层,例如服务提供者? ***

【问题讨论】:

    标签: php testing phpunit eloquent phpspec


    【解决方案1】:

    我不了解 Laravel,但阅读人们在单元测试方面遇到的问题告诉我,其中存在很多设计问题。我知道 Laravel 的那些有问题的功能是可选的,所以有希望!

    在另一个问题的答案中查看我对 PhpSpec 与 PhpUnit 的比较:First Shot at Testing Laravel 4 apps (PHPSpec/BDD vs. PHPUnit/TDD)

    我猜你在使用 PhpSpec 和 Laravel 时会遇到很多问题,而且通常你必须避免指定 Laravel 特定的怪癖,或者避免它们(外观是可选的,你可以使用适当的依赖注入)。我的目标是让尽可能多的代码独立于框架并适当地对它们进行单元测试。然后,您可以拥有一层薄薄的框架胶水代码,覆盖功能或集成测试。应用依赖注入。

    作为一个取自 Symfony 和 Doctrine 的例子,我通常不为 Doctrine 存储库编写规范。好吧,我只希望他们实现某个接口。就这样。其余的都包含在我的验收测试中。验证存储库是否使用查询构建器来生成预期的查询没有多大价值。真的没意思。

    回到工具上,我可以看到自己为不同类型的测试混合了不同类型的测试工具:

    • phpspec - 单元测试 - 我将在这个级别编写大部分测试
    • behat - 验收测试
    • phpunit - 集成和功能测试 - 我将进行少量测试,因为它们脆弱且速度慢。

    【讨论】:

    • 你好,伙计,到底有什么问题? Laravel 社区非常受 BDD 和 TDD 驱动。我认为他们是一个干净的程序员社区。那么什么是 SUT 以及他们如何处理它?
    • 我想这是由当今的趋势引起的,在 Laravel 社区中非常受欢迎,这很可能要归功于 Jeffrey Way 在那里的强大影响力以及对 phpspec 和 behat 的良好营销,你应该测试你的代码。有很多人到目前为止还没有测试过他们的代码并且他们正在努力改变它,因此他们面临着这些问题。
    【解决方案2】:

    这实际上与 Laravel 没什么关系,实际上是 ActiveRecord 作为模式的一个基本问题。当你使用 ActiveRecord 时,你牺牲了可测试性。 ActiveRecord 与数据库持久性不可调和。

    如果您希望使用测试优先的方法,我建议您使用不同的持久性方法。编写您的对象以一起运行。然后用 Doctrine 之类的东西附加持久性。

    如果您仍然想使用 ActiveRecord,那么您需要做一些不同的事情。 Laravel 不强制使用 Eloquent。但是,它确实是开箱即用的。 ActiveRecord 是一个或多或少适合编写 CRUD 应用程序的工具。如果您正在做更复杂的事情,我建议您使用 Doctrine。

    【讨论】:

      猜你喜欢
      • 2015-08-25
      • 2015-02-14
      • 1970-01-01
      • 2021-11-01
      • 2015-07-26
      • 1970-01-01
      • 1970-01-01
      • 2015-03-03
      • 1970-01-01
      相关资源
      最近更新 更多