【问题标题】:PHPSpec and BehatPHPSpec 和 Behat
【发布时间】:2021-11-08 03:57:16
【问题描述】:

我刚开始学习 BDD 的概念。

我为此学习了 PHPSpec 和 Behat,但我不清楚为什么我需要同时使用这两者。我知道 behat 用于功能/验收测试,而 PHPSpec 主要用于单元测试,但我在此找到的文章和视频基本上是对代码进行两次测试:一次使用 behat(带有场景),一次使用 phpspec。有人可以用简单的例子向我解释一下有什么区别,什么时候需要使用 behat 和 whan phpspec?

提前感谢您的回答, 兄弟。

【问题讨论】:

    标签: php unit-testing testing behat phpspec


    【解决方案1】:

    好吧,在开始回答之前,我想指出,下面是一个比“phpspec and behat”更普遍的答案。

    正如您所说的那样,phpspec 是一种旨在编写单元测试的工具,而 behat 则是用于其他类型的测试(比如说从集成到 e2e/smoke 测试)。到目前为止,一切都很好。所以现在我们可以抽象和区分单元测试工具和其他测试工具。

    让我们开始定义什么是单元测试,什么不是。单元测试是针对系统的“小”部分(单元)进行的一种测试。通常它的重点是单个类或方法(但并不总是如此)。单元测试在运行快速隔离时促进快速重构。请注意快速隔离,我们会尽快回复。

    其他类型的测试更繁琐,并且旨在测试某些组件之间的交互,或整个功能,或用户使用它的“整个”系统。为什么麻烦?因为你可能需要设置一个数据库,你可能需要运行一个网络服务器,你可能需要一个像 selenium 这样的浏览器模拟器,等等。因此,这些测试比单元测试要慢得多。此外,当除单元之外的其他测试出现错误时,由于您具有“整体”功能,因此寻找错误会更加痛苦,而对于单元测试,至少,您知道什么类(或其中的一组)是导致错误。

    说了这么多,还记得关于单元测试速度和隔离的说法吗?好吧,速度可以帮助您“更快地失败”(您无需等待整个系统引导,无论它对您的项目意味着什么)并以更“本地化”的方式(隔离)失败。

    我的建议是遵循test pyramid:大量的单元测试(所有可能的 I/O 排列,例如,一个方法)并且只对集成及以上有价值的测试。举个例子:您可以针对特定查询测试存储库(与 DB 交互,因此您不能对单元执行某些操作),您可以测试要访问的登录页面或主页(作为应用程序的状态健康)等等。

    我的回答只是一个简短的总结;希望这能推动您朝着正确的方向前进。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多