PHPSpec and Behat



我刚刚开始学习BDD的概念。

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

提前感谢大家的回答,Br .

好吧,在开始回答之前,我想指出,接下来的是一个比"php规范和行为"更一般的答案。一。

正如你所说的,phpspec是一个编写单元测试的工具,而behat是用于其他类型的测试(比如从集成到端到端/冒烟测试)。到目前为止一切顺利。所以现在我们可以抽象和区分单元测试工具和其他测试工具。

让我们开始定义什么是单元测试,什么不是。单元测试是一种针对"小的"代码进行的测试。系统的一部分(单元)。通常情况下,它的重点是一个类或方法(但并不总是如此)。单元测试促进了快速重构,因为它们运行,并且在隔离中运行。请专注于隔离和我们很快就会回来的。

其他类型的测试更麻烦,并且面向测试某些组件之间的交互,或整个功能,或"整体"。系统作为用户将使用它。为什么麻烦?因为您可能需要设置数据库,可能需要运行web服务器,可能需要像selenium这样的浏览器模拟器,等等。正因为如此,这类测试比单元测试慢得多。此外,当一个错误出现在除了单元以外的其他测试时,就像你有一个"整体"一样;在功能测试中,查找bug会更加痛苦,而在单元测试中,至少你知道是哪个类(或一组类)导致了bug。

说了这些,还记得关于单元测试速度和隔离的陈述吗?嗯,速度会帮助你"更快地失败"。(你不需要等待整个系统启动,不管这对你的项目意味着什么),并且在更"本地化"的情况下失败。(隔离).

我的建议是遵循测试金字塔:大量的单元测试(所有可能的I/O排列,例如,一个方法),只测试那些对集成或以上有价值的。举个例子:你可以为一个特定的查询测试一个存储库(与DB交互,所以你不能用unit做的事情),你可以测试要到达的登录页面或主页(作为应用程序健康状况的状态)等等。

我的回答只是一个简短的总结;希望它能指引你走向正确的方向。

最新更新