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

PHPUnit&;贝哈特;补充还是替代?,php,phpunit,bdd,behat,mink,Php,Phpunit,Bdd,Behat,Mink,我一直在搜索SO和谷歌,但我无法真正得到一个明确的答案 PHPUnit是一个单元测试框架,就像JUnit一样。我使用它,还结合Selenium扩展进行功能测试。当我四处浏览时,我看到Behat/Mink不断被提及。但我不完全理解Behat是如何适应这里的 使用Behat,您可以以人类可读的格式编写场景。然后Behat可以将其转换为新项目的骨架类吗?但它是否也为单元测试提供了框架类?您是使用Behat编写单元测试,还是使用PHPUnit/SimpleTest来编写单元测试 但是Behat/Mink

我一直在搜索SO和谷歌,但我无法真正得到一个明确的答案

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

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

但是Behat/Mink是否会取代PHPUnit_Selenium-extension进行功能测试


您是否只使用BeHAT用于新项目,或者它也适用于现有项目?

< P>是的,我认为BeHAT是PHPUnbe的替代品,既适用于通用代码测试,也适用于浏览器自动化的功能测试。 对于一般测试,phpUnit是一个更成熟的产品,而Behat则专注于使用“BDD”方法(行为驱动设计)编写的测试。phpUnit也有BDD特性,但Behat更倾向于这种样式

因为我们讨论的是功能性浏览器测试而不是单元测试,所以您可能没有考虑它们所具有的一些更强大的单元测试特性;您只需要编写浏览器自动化。对于这一点,你真的可以选择两个最适合你的

在一些微妙的边缘情况下,它们彼此都有优势,但在大多数情况下,它们都能够跨各种浏览器运行测试脚本

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


值得一提的是,如果你不想写BDD风格的测试,Mink可以在没有BEAT的情况下单独使用。

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

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


TDD,除了像你的头脑这样的东西之外,还应该指导你的课程结构和它们之间的互动。除此之外,它们还证明了您的方法做了它们应该做的事情,明确了意图,并使重构成为可能,而无需担心。

这个答案似乎完全错了

phpunit是单元测试,因此它遵循TDD

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

它们是相互补充的,一个完美的场景是一个同时进行两种类型测试的项目,但这可能仅限于有能力这样做的大型项目

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

那么,对于未考虑BDD的现有应用程序,您会使用PHPUnit吗?对于一个新项目,使用BDD,preferbehat?我对Mink的偏好主要是回答编写功能浏览器测试脚本的问题,因为它具有灵活性。我确实提到了BDD方面,但我并没有在回答时真正考虑到这一点。就我自己而言,我使用phpUnit进行单元测试,使用Mink/Sahi进行功能测试。(但我们正在考虑将我们的功能测试转移到Javascript,以减少测试脚本和浏览器之间的软件层数量)这个答案似乎完全错了。phpunit是单元测试,因此它遵循TDD。phpspec和behat是一种功能测试,所以它是BDD。它们相互补充。TDD测试单个或几个类。BDD测试应用程序中跨多个模块的完整功能。BDD没有指定级别。您可以测试单元的行为。从这个意义上说,BDD可以应用于单元测试。Phpspec不适用于单元测试。正如你在他们的网站上看到的,是BDD