PHPUnit & Behat;补充还是替代?

2022-08-30 13:57:23

我一直在寻找SO和谷歌,但我真的无法得到一个明确的答案。

PHPUnit是一个用于单元测试的框架,就像JUnit一样。我使用它,也与硒扩展结合使用进行功能测试。当浏览周围时,我看到Behat / Mink不断被提及。但我不完全理解Behat如何适应这里。

使用Behat,您可以以人类可读的格式编写场景。然后,Behat可以将其转换为新项目的骨架类吗?但是它是否也为单元测试提供了框架类?你是使用Behat编写unittests,还是使用PHPUnit / SimpleTest?

但是Behat/Mink确实取代了PHPUnit_Selenium扩展的功能测试吗?

您是将Behat仅用于新项目,还是也可以将其应用于现有项目?


答案 1

我认为Behat是对PHPunit的补充。我的意思是通过使用Behat来测试行为,PHPUnit来测试代码来补充。使用BDD / TDD,首先要根据用户情景编写测试。要使测试通过,您通常需要使用 TDD 编写多个 PHPUnit 测试来创建能够通过 BDD 测试的应用程序。

BDD应该测试行为,并且不知道应用程序的代码,如实体/控制器/接口。您应该能够将整个应用程序与另一个应用程序交换,并且当应用程序的行为相同时,仍然通过所有测试。

除了像你的思想这样的东西之外,TDD还应该指导你的课程结构和它们之间的互动。除此之外,它们还证明你的方法做了他们应该做的事情,明确了意图,并使得可以毫无畏惧地重构。


答案 2

是的,我认为Behat是phpUnit的替代品,无论是用于通用代码测试还是使用浏览器自动化进行功能测试。

对于一般测试,phpUnit是一个更成熟的产品,而Behat专注于使用“BDD”方法(行为驱动设计)编写的测试。phpUnit也确实具有BDD功能,但Behat更倾向于这种风格。

由于我们谈论的是功能浏览器测试而不是单元测试,因此您可能没有考虑它们具有的一些更强大的单元测试功能;你只想编写浏览器自动化。为此,您真的可以选择最适合您的两个中的任何一个。

在一些微妙的边缘情况下,它们中的每一个都比另一个更有优势,但在大多数情况下,它们都能够在各种浏览器上运行测试脚本。

我更喜欢Behat/Mink,理由是它更灵活。它可以支持多个浏览器自动化引擎,包括Selenium和Sahi,这意味着如果你遇到一个问题,你可以将测试切换到另一个并继续。我们遇到了这种情况,试图让一些Mink测试脚本在Selenium中工作;切换到Sahi使它工作,并且只需要更改一行测试代码。

还值得补充的是,如果您不想编写BDD样式测试,Mink可以在没有Behat的情况下单独使用。


推荐