【问题标题】:Unit testing in PHP? [duplicate]PHP中的单元测试? [复制]
【发布时间】:2010-10-22 12:22:30
【问题描述】:

我一直在考虑为我的 PHP/MySQL 项目编写单元测试。

困扰我的是如何测试表单验证、ajax 功能和 UI 功能(例如单击链接)。另外,我不希望测试依赖于 UI 的某个方面,所以如果我移动一个链接,那么所有测试都会中断。

是否有人对我应该对代码的哪些部分进行单元测试、大约应该在单元测试上花费多少时间以及任何其他建议/提示有任何想法/建议?

【问题讨论】:

标签: php unit-testing


【解决方案1】:

您应该翻阅documentation of SimpleTest 的这一部分,并查看他们用于测试的方法

  • 页面内容
  • 导航
  • cookies
  • 图片
  • 表单提交
  • 重定向
  • 代理

即使您最终没有使用 SimpleTest,也可能值得一看。

对我来说,最有用的是测试表单提交,包括 GET 或 POST 请求中的每个参数,这些参数是您网站运营所必需的每个表单。

您是要测试大量 UI 还是只测试小的关键区域取决于您。

【讨论】:

    【解决方案2】:

    单元测试,至少从 Web 应用程序开发的角度来看,并不能真正涵盖 UI 设计。单元测试可以帮助你的是测试所有控制器方法的输入/输出和/或任何你闲逛的单例/全局函数。因此,如果您想获得表单验证的单元测试覆盖率,请确保您的应用程序的结构能够独立于 UI 来测试您的验证功能。

    class SomeController extends ... {
        ... function isAPhoneNumber($string){
            if(...) {
                return true;
            }
            else (...) {
                return false;
            }
        }
    }
    

    这确实使所有使您对该方法产生价值的代码都未经测试。我见过的唯一有效的测试方法是直接使用浏览器远程控制(如Selenium)测试 UI。 PHPUnit testing framework 具有使用 Selenium 的 PHP 驱动程序的钩子,这意味着您可以使用与其他单元测试相同的测试运行器。

    您永远无法 100% 保证一个无害的更改不会阻碍您的 Selenium 测试,但您可以在开发过程中采取一些措施来最大限度地减少这种情况。 Selenium 有various different ways 来“定位”它将点击或输入的元素。您希望使用尽可能具体的定位,因此请尝试为您的所有 (X)HTML 节点提供唯一的 ID 元素。这确保 selenium 将单击链接,无论它在页面上的哪个位置结束。

    如果无法使用唯一 id,请尝试使用一些具有唯一标识符的 HTML 元素来包装常见元素,然后使用 selenium 的 xpath tareting 功能说“单击 div 中包含文本“注册”的链接id 为“foo”,或者点击 id 为“foo”的 div 中的第三个链接。

    如果从上述项目中看不出来,不要依赖 Selenium IDE(或其他记录器)将选择的目标选择。他们的目标是确保在该确切页面上运行测试会给您相同的结果,这会给您带来非常脆弱的 xpath。始终查看您记录的测试,并修复劣质目标。

    这里没有简单的答案。如果有,Web 应用程序的错误会少很多。

    【讨论】:

      【解决方案3】:

      我不知道我的回答是否有帮助,因为我也有同样的问题。

      无论如何,如果您还没有这样做,请尝试Windmill,我发现它非常有用、快速而简单,并且适用于主流浏览器。

      更改链接不会改变测试(我认为在大多数情况下)=)

      【讨论】:

        【解决方案4】:

        试试 SeleniumHQ.org。

        这是一个浏览器扩展程序,可让您像宏一样记录点击、打字和鼠标移动等。可以将宏保存为测试并回放,以测试 Web 应用程序。

        看起来他们也有其他版本的产品,可以通过启动其他浏览器来执行测试。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-11-05
          • 2023-03-31
          • 1970-01-01
          • 2013-05-08
          • 1970-01-01
          • 2015-02-09
          • 2015-11-17
          相关资源
          最近更新 更多