我一直在考虑为我的PHP / MySQL项目编写单元测试。
让我烦恼的是我如何测试表单验证,ajax功能和UI功能(例如点击链接)。另外,我不希望测试依赖于UI的一个方面,所以如果我移动了一个链接,那么所有测试都会中断。
有没有人对我应该单元测试的代码部分,大约应该花多少时间进行单元测试以及任何其他建议/提示有任何想法/建议?
答案 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,我发现它非常有用,快速而且脏,可以在主流浏览器中使用。
更改链接不会改变测试(在我认为的大多数情况下)=)