【发布时间】:2013-02-28 09:46:58
【问题描述】:
首先,我不知道它是否称为单元测试。如果它有不同的名称,请随时纠正我。
我目前正在开发这样的网络应用程序。
假设我正在开发一个表单来将值保存到数据库中。我开发 HTML 和 PHP。我不时在浏览器中按 F5 并检查 HTML/jQuery 是否没有错误,PHP 是否不会给出错过分号之类的错误。
当它完成并且一切都准备好进行测试时,我开始测试我的一小段代码。喜欢;
- -$_POST 数组是否正确地从表单文件中获取值? (我用 print_r 测试)
- -“$email”变量是否被正确清理为有效的电子邮件? (我用不同的可能性对其进行测试,例如:aaa@bbb、aa@bb.com、a@@b.net 等)
- -提交的表单是否通过所有控制,并成功插入数据库? (我检查了我的 MySQL 表。)
- -表单是否正确显示错误/成功消息?
- -...等
如果它使用正确的值,并且使用错误的值失败;我相信表单可以按预期工作并且没有错误,所以我继续做其他事情。
我不想这样做,而是想确保一切正常运行,否则会在不向浏览器发送垃圾邮件 F5 的情况下通知我问题。
像这样;
<?php
/* Unit Testing Start --
-ensure: isset($_POST['submit']) returns TRUE;
-ensure: isset($email) returns TRUE;
-ensure: isValidEmail($email) returns TRUE;
-ensure: connectDatabase() returns TRUE;
-ensure: getMysqlAffectedRows() returns 1;
-ensure: hasErrors() returns false;
*/
?>
我的表单代码,使用我上面发布的功能。
当它运行时,它应该向我显示这样的消息:(最好也记录它)
Test complete. Tested (6) possibilities, (4) succeeded, (2) failed.
Failed 1: isValidEmail() returned FALSE, expected: TRUE.
Failed 2: getMysqlAffectedRows returned NULL/0, expected INTEGER 1.
这样的事情会节省我很多时间,并且更容易维护我的代码。
我不想这样做:
$email = 'xxx@yyy.com';
echo isValidEmail($email) ? 'true' : 'false';
然后我必须从我的 PHP 脚本中删除这些行。测试必须永远留在那里,除非我手动删除它们。它们应该像 cmets 所以在生产网站中,它们不会被执行。但是,在我的开发 PC 中,我将安装我需要安装的任何内容,并且必须解析/记录这些 cmets。
所以,是的。就这样。现在进入问题:
有可能与 PHP 相关吗?如果是这样,我该怎么做?
它叫什么,单元测试,还是什么?
你们如何测试你们开发的任何东西?
你们如何在不担心的情况下设法开发大型 Web 应用程序? “如果我改变这个功能,整个网站可能会崩溃。”?另外,您如何确定更改功能没有破坏任何东西? X 页面可能工作正常,但 Y 页面可能会因为您之前没有想到的事情而损坏。比如X页除以3可能没问题,但是Y页除0肯定会报错,你只检查X页?
如果您能回答我的问题并帮助我成为更好的开发人员,我将非常高兴。
谢谢!
【问题讨论】:
-
这不是单元测试,更多的是功能测试——对于单元测试,我们使用单元测试套件,例如 PHPUnit 或 SimpleTest;对于功能测试,我们使用 PHPSpec 或 Behat
标签: php testing automated-tests