用PHP进行单元测试?

时间:2009-04-29 06:32:38

标签: php unit-testing

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

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

有没有人对我应该单元测试的代码部分,大约应该花多少时间进行单元测试以及任何其他建议/提示有任何想法/建议?

4 个答案:

答案 0 :(得分:3)

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

  • 页面内容
  • 导航
  • 饼干
  • 图像
  • 表单提交
  • 重定向
  • 代理

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

对我来说,最有用的是测试表单提交,包括每个表单的GET或POST请求中的每个参数,这些参数对于站点的操作是必需的。

您是否想要测试很多用户界面或只是小的关键区域取决于您。

答案 1 :(得分: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”,或点击div中第三个链接,ID为“foo”。

如果上述项目不明显,依赖Selenium IDE(或其他录像机)将选择的定位选项。他们的目标是确保在那个确切的页面上运行测试会给你相同的结果,这会给你非常脆弱的xpath。始终查看您记录的测试,并修复劣质定位。

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

答案 2 :(得分:0)

试试SeleniumHQ.org。

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

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

答案 3 :(得分:0)

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

无论如何,如果你还没有这样做,试试Windmill,我发现它非常有用,快速而且脏,可以在主流浏览器中使用。

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