【问题标题】:Creating a fake user in Symfony2 for testing purposes在 Symfony2 中创建一个假用户用于测试目的
【发布时间】:2012-10-26 15:51:33
【问题描述】:

我对 PHP 测试有些陌生。我已经使用 Cucumber、RSpec、Capybara 和 Factory Girl 对 Rails 进行了相当多的测试,但我几乎没有使用 PHP 进行过任何测试。

我将尽可能以最笼统的方式就我当前的挑战提出一个问题,因为我已经走了几条特定的道路,但遇到的只是挫败感。

我想编写一个功能测试来让用户登录。有什么好的方法可以创建我需要的测试用户对象以便尝试登录?

更一般地说,在 Symfony2 中创建测试对象的事实标准是什么?夹具?某种工厂?

在 Ruby 中,我会使用 Factory Girl,因为它可以让您以干净、干燥的方式处理任何对象的依赖关系。 Phactory 中的 PHP 中似乎有一个 Factory Girl 等价物,但不幸的是,该工具似乎没有被广泛使用并且不再维护。

【问题讨论】:

  • 三个答案,得分 0、-1 和 -1。到目前为止,在我看来,可能没有事实上的标准。

标签: php testing symfony phpunit


【解决方案1】:

test environment configuration 上的Fixtures 可能是要走的路!

关于fixtures being application-wide comment,我不同意。

如果您进行单元测试,那可能会很有意义。

但是,Functional tests 应该是应用程序范围的。

【讨论】:

  • 功能测试应该是端到端的——而不是应用程序范围的。
  • 功能测试,如docs 大喊,“检查应用程序不同层的集成(从路由到视图)”。单个功能(具有端到端流,可以很容易地被认为是一个应用程序。从这个意义上说,任何涉及请求和响应的东西都是一个应用程序。因此,可以考虑功能应用程序范围。以及功能测试。
  • 端到端意味着从视图到数据库的垂直切片;应用程序范围意味着可以有多个垂直切片的水平切片。
  • 一个测试可能只需要一个用户,而另一个测试可能需要 10 个用户和 20 篇文章。为每个测试填充整个固定装置是一种矫枉过正。哦,我希望你不是要为整个测试套件加载一次固定装置——这是一个非常糟糕的主意,因为在这种情况下测试不是孤立的。这就像测试 101。
  • 我选择这个作为最好的答案,因为夹具似乎是最接近测试对象事实上的标准的东西。我认为建造商/工厂会更好,但我要求的是标准方式,不一定是最佳方式。应用程序范围的辩论对我来说并不是那么重要。
【解决方案2】:

我自己写test data builders,因为反正几乎没有样板。顺便说一句,Factory Girl 就是这种模式的实现。

您可以在 Growing Object-Oriented Software, Guided by Tests 书中找到有关该模式的精彩讨论以及许多其他有用的内容。

我建议不要使用固定装置,因为它们是应用程序范围的。每个测试只准备自己需要的数据。

【讨论】:

  • 你必须从头开始写东西吗?那里已经没有什么可用的了?
  • 我找不到任何未与数据库耦合的现有内容。我需要一些可以构建对象的东西,我可以通过我的经理层(如UserManagerOrganizationManager 等)坚持下去。为我的每个模型类编写一个构建器并不难——没什么特别的。
【解决方案3】:

我使用夹具进行功能测试,但我不同意它们仅适用于应用程序。我在捆绑范围内使用它,在捆绑中的适当目录中定义。在测试设置中,我从正确的目录运行控制台固定装置:加载方法,可能不是最佳解决方案,但它对我很有用。如果有人有更好的解决方案,我会很乐意阅读它:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    相关资源
    最近更新 更多