【问题标题】:PHPUnit & Behat; complementing or alternatives?PHPUnit & Behat;补充还是替代?
【发布时间】:2013-02-12 08:17:55
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: php phpunit bdd behat mink


    【解决方案1】:

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

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

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

    【讨论】:

    • BDD 没有指定级别。您可能正在测试一个单元的行为。从这个意义上说,BDD 可以应用于单元测试。
    【解决方案2】:

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

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

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

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

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

    如果你不想编写 BDD 风格的测试,Mink 也可以在没有 Behat 的情况下单独使用。

    【讨论】:

    • 那么,对于一个没有考虑 BDD 的现有应用程序,您会使用 PHPUnit 吗?对于使用 BDD 的新项目,更喜欢 Behat?
    • 我对 Mink 的偏好主要是回答编写功能性浏览器测试脚本的问题,因为它具有灵活性。我确实提到了 BDD 方面,但我并没有真正考虑到答案。对于我自己,我使用 phpUnit 进行单元测试,使用 Mink/Sahi 进行功能测试。 (但我们正在考虑将我们的功能测试转移到 Javascript,以减少测试脚本和浏览器之间的软件层数)
    • 这个答案似乎全错了。 phpunit 是单元测试,因此它遵守 TDD。 phpspec 和 behat 是功能测试,所以它是 BDD。他们互补。 TDD 测试单个或几个类。 BDD 跨应用程序中的多个模块测试完整功能。
    【解决方案3】:

    这个答案似乎全错了。

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

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

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

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

    【讨论】:

    猜你喜欢
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多