Alf*_*red 18
你们用PHP进行任何单元测试吗?我不确定我是否曾经做过......究竟是什么原因?
单元测试是仅测试一个单元(类)的实践.对于任何好的单元测试,应该允许单独运行(单独运行)并且非常快,否则您可能不会经常运行测试.
您还可以编写集成测试来测试整个系统,并且大多数时候执行起来要慢得多.这些测试应该在单元测试后编写!
在过去,当我使用PHP语言进行更多(频繁)编码时,我根本没有练习TDD(测试驱动开发)(回头看我的代码不是鼻烟).但是现在当我必须在PHP中执行一些代码时,我真的很想测试(单元测试)我的代码.在我看来,你也应该这样做,因为它让你确信代码的质量.
多年来,我用三个简单的规则来描述测试驱动开发.他们是:
- 除非要进行失败的单元测试通过,否则不允许编写任何生产代码.
- 您不得再编写任何单元测试,而不是足以使其失败; 和编译失败是失败.
- 您不能再编写足以通过一个失败单元测试的生产代码.
您必须首先为要编写的功能编写单元测试.但是根据规则2,你不能写很多单元测试.一旦单元测试代码无法编译或断言失败,您必须停止并编写生产代码.但是根据规则3,您只能编写使测试编译或通过的生产代码,而不是更多.
如果你想到这一点,你就会意识到,如果不编译和执行某些东西,你就根本无法编写很多代码.实际上,这确实是重点.在我们所做的每件事中,无论是编写测试,编写生产代码还是重构,我们都会始终保持系统的执行.运行测试之间的时间大约为秒或分钟.即使10分钟也太长了
你能提供一个简单的例子吗?
<?php
class StackTest extends PHPUnit_Framework_TestCase
{
public function testPushAndPop()
{
$stack = array();
$this->assertEquals(0, count($stack));
array_push($stack, 'foo');
$this->assertEquals('foo', $stack[count($stack)-1]);
$this->assertEquals(1, count($stack));
$this->assertEquals('foo', array_pop($stack));
$this->assertEquals(0, count($stack));
}
}
?>
Run Code Online (Sandbox Code Playgroud)
作为一个更详细的例子,我想在github上向你指出我的片段.
我喜欢使用单元测试框架(在PHP中是phpunit)来练习一种叫做TDD的东西.
我也非常喜欢phpunit,它还通过xdebug 提供代码覆盖.从下图中可以看出,我的班级有100%的测试覆盖率.这意味着我的Authentication班级中的每一行都经过测试,这让我相信代码正在做它应该做的事情.请记住,覆盖并不总是意味着您的代码经过了充分测试.您可以在不测试单行生产代码的情况下获得100%的覆盖率.
我个人喜欢在Netbeans中测试我的代码(对于PHP).只需单击一下(alt + f6),我就可以测试我的所有代码了.这意味着我不必离开我喜欢的IDE,这可以帮助您节省在会话之间切换的时间.

小智 12
我建议你看看phpunit.手册中还提供了一些简单的例子:http: //www.phpunit.de/manual/3.5/en/writing-tests-for-phpunit.html
| 归档时间: |
|
| 查看次数: |
3784 次 |
| 最近记录: |