PHPUnit&贝哈特;补充还是替代?

时间:2013-02-12 08:17:56

标签: php phpunit bdd behat mink

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

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

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

但Behat / Mink确实取代PHPUnit_Selenium-extension进行功能测试?

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

3 个答案:

答案 0 :(得分:34)

我会认为Behat与PHPunit 互补。我的意思是通过使用Behat进行测试行为,PHPUnit来测试代码。使用BDD / TDD,首先要根据用户故事编写测试。为了使测试通过,您通常会使用TDD编写几个PHPUnit测试来创建能够通过BDD测试的应用程序。

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

除了像你的想法之外的其他东西,TDD应该引导你的类结构和它们之间的交互。除此之外,他们证明你的方法做了他们应该做的事情,使意图明确,并且可以毫无畏惧地进行重构。

答案 1 :(得分:13)

是的,我会认为Behat是phpUnit的替代品,用于通用代码测试和使用浏览器自动化的功能测试。

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

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

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

我倾向于Behat / Mink,因为它更灵活;它可以支持多个浏览器自动化引擎,包括Selenium和Sahi,这意味着如果遇到问题,可以将测试切换到另一个并继续。我们遇到了这种情况,试图让一些Mink测试脚本在Selenium中运行;切换到Sahi使其工作,并且只涉及改变一行测试代码。

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

答案 2 :(得分:6)

这个答案似乎完全错了。

phpunit是单元测试,并且它遵守TDD。

phpspec和behat是一个功能测试,所以它是BDD。

它们相互补充,一个完美的场景将是一个项目,你有两种类型的测试,但这可能只限于能够负担得起的大型项目。

TDD测试单个或仅几个类。 BDD测试应用程序中多个模块的完整功能。