首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Laravel、PHPSpec和PHPUnit测试模型和服务

用Laravel、PHPSpec和PHPUnit测试模型和服务
EN

Stack Overflow用户
提问于 2014-12-19 17:18:19
回答 2查看 1.4K关注 0票数 1

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

我非常喜欢PHPSpec测试的行为方面,尽管它与测试雄辩的模型或任何与活动记录ORM相关的内容不兼容。

当测试像服务提供者这样的东西时,PHPSpec似乎是可行的。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-21 10:54:10

我不知道Laravel,但是阅读人们在单元测试中遇到的问题--它告诉我那里有很多设计问题。我知道Laravel的那些有问题的特性是可选的,所以有希望!

参见我在另一个问题的回答: PhpSpec与PhpUnit的比较:First Shot at Testing Laravel 4 apps (PHPSpec/BDD vs. PHPUnit/TDD)

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

作为一个来自Symfony和Doctrine的例子,我通常不为Doctrine存储库编写规范。我只希望他们能实现一个特定的接口。就这样。其余的都是我的验收测试。验证存储库是否使用查询生成器来生成预期的查询没有多大价值。真的没什么意义。

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

  • phpspec -单元测试-我将在这个级别上编写大部分测试。
  • behat -验收试验
  • phpunit --集成和功能测试--我将有少量的这些,因为它们脆弱而缓慢。
票数 5
EN

Stack Overflow用户

发布于 2014-12-21 11:54:04

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

如果您想使用先测试的方法,我建议您使用不同的持久性方法。把你的对象写成一起工作。然后再用类似于Doctrine的东西来附加持久性。

如果您想无论如何使用ActiveRecord,那么您将需要做一些不同的事情。拉勒维尔并没有强迫使用雄辩。但是,它确实是从盒子里运出来的。ActiveRecord是一个或多或少适合编写CRUD应用程序的工具。如果你在做更复杂的事情,我会建议你坚持原则。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27570864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档