33

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

PHPUnit 是一个单元测试框架,类似于 JUnit。我使用它,还与 Selenium-extension 结合使用进行功能测试。浏览时,我看到 Behat/Mink 不断被提及。但我不完全理解 Behat 是如何适应这里的。

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

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

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

4

3 回答 3

39

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

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

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

于 2013-08-10T18:17:29.150 回答
15

是的,我认为 Behat 是 phpUnit 的替代品,既可用于一般代码测试,也可用于使用浏览器自动化进行功能测试。

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

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

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

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

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

于 2013-02-12T11:20:51.243 回答
7

这个答案似乎全错了。

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

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

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

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

于 2013-08-13T19:55:41.527 回答