【问题标题】:Unit Testing HTTP-actions单元测试 HTTP 操作
【发布时间】:2009-04-12 12:13:06
【问题描述】:

我正在编写又一个 PHP 框架,现在我已经编写了很多东西,我开始考虑单元测试(是的,我知道,糟糕的形式)。

一些动作使框架修改 HTTP 行为,例如创建 cookie、重定向浏览器。另一个主要特性是访问的 URI 会影响框架的行为方式。

简而言之,我需要能够测试影响环境或受环境影响的东西,而不仅仅是函数/方法的返回值。我怎样才能最简单地做到这一点?

【问题讨论】:

  • 我还没走到这一步。我仍在记录这件事,这需要一段时间。然后我又得到了一个代码清理里程碑。我想只有在那之后我才会开始测试。实际上,这意味着几个月,不幸的是:/

标签: php unit-testing http-headers


【解决方案1】:

SimpleTest 的Web Tester 可能对你有帮助。

【讨论】:

  • 我发现 Simpletest web/form 测试器比 PHPunit 工具更容易。实际上,我有两个主要作者,并排询问他们是否可以将 ST 的 WT 集成到 PHPUnit 中。这是希望。
  • 或者当您还需要在页面上测试 JavaScript 并进行一些跨浏览器测试时,您可能想看看 Selenium。
  • 这很奇怪 - 我很确定我之前偶然发现了 SimpleTest,但从来没有印象它涉及到这一点。这很可能是我所追求的。感谢您的链接,这需要更详细的调查。等待“接受的答案”。
【解决方案2】:

简而言之,我需要能够测试影响环境或受环境影响的东西,而不仅仅是函数/方法的返回值。我怎样才能最简单地做到这一点?

如果环境可以轻松模拟并且可以用少量状态完全表示,那么您应该考虑模拟测试。模拟测试可以帮助您编写测试,而不必使用真实的域对象,如果您可以简单地确保以正确的顺序调用事物就可以了。这是a good overview的原则。

如果不是这种情况,那么您说的是集成测试,它的成本要高得多。集成测试可帮助您查看您的系统是否具有凝聚力,并且通常与应用程序的实时全栈副本一起运行。这是关于集成测试的some more reading

【讨论】:

  • 环境不容易完全表示。此外,如果我手动生成刺激,我宁愿不冒险生成错误的东西(即没有正确格式化东西。)
  • 但是,是的,如果你想称之为集成测试(我不是 100% 清楚测试和测试之间的细微差别。我只是想确保一切都按预期运行),都很好。不过,我感兴趣的是“如何”,而不是“什么”。
【解决方案3】:

您应该在单元测试中向服务器发出 HTTP 请求,然后检查响应中的 cookie 和标头是否设置正确。

在 PHP 中,我会使用 Zend_Http_Client。文档可以在 Zend_Http 包中找到 here

【讨论】:

    【解决方案4】:

    所以听起来好像您正在编写集成测试而不是单元测试(根据定义,任何涉及环境的东西都是集成测试)。

    这会更容易通过浏览器通过堆栈进行测试吗?如果是这样,请查看浏览器自动化框架,可能类似于 http://wtr.rubyforge.org/

    【讨论】:

      【解决方案5】:

      (是的,我知道,格式不好)。

      是的。如果您从测试开始,您会以某种方式编写框架,以便可以模拟外部依赖项。您现在可以做的是将所有对操纵全局状态的函数的调用替换为对全局代理对象的调用。然后,您可以在测试期间对此进行模拟。全局状态的一个特别麻烦的变化是调用exit/die。您可以尝试用模拟中的异常替换它。

      【讨论】:

      • 我想到了这个(Zend Framework 似乎是这样做的)。但是代理对象和它对实际环境的信号之间是否存在可能的故障点?我仍然需要测试,不是吗?
      • 你一般不能通过单元测试来测试那种适配器;为此,您将不得不依赖集成测试(webtest)。但是你会想分别测试这些东西,而不是仅仅通过 webtests 运行所有东西。单元测试更加精确,并且允许模拟。
      • 当他已经知道并试图清理他的行为时,为什么要以这种责骂的语气开始。这只会让人们心灰意冷。
      • @b01 很奇怪。我认为你在这里过度解释了。请注意,我写这篇文章已经 5 年了,今天我可能会不那么生硬地表达自己,但我不认为这有任何粗鲁。真的只是在陈述事实。虽然很明显你发现不是这样,所以我会记住这一点。
      猜你喜欢
      • 2012-05-20
      • 2013-09-22
      • 1970-01-01
      • 2017-10-14
      • 2014-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多