1、ubuntu12.04安装
wget https://phar.phpunit.de/phpunit.phar chmod +x phpunit.phar mv phpunit.phar /usr/local/bin/phpunit
2、测试案例phpunit1.php(测试的依赖关系)
展示如何用@depends标注来表达测试方法之间的依赖关系
<?php class StackTest extends PHPUnit_Framework_TestCase { public function testEmpty() { $stack = array(); $this->assertEmpty($stack); return $stack; } /** * @depends testEmpty */ public function testPush(array $stack) { array_push($stack, 'foo'); $this->assertEquals('foo', $stack[count($stack)-1]); $this->assertNotEmpty($stack); return $stack; } /** * @depends testPush */ public function testPop(array $stack) { $this->assertEquals('foo', array_pop($stack)); $this->assertEmpty($stack); } }
3、测试结果
phpunit phpunit1.php PHPUnit 3.7.27 by Sebastian Bergmann. ... Time: 4 ms, Memory: 4.25Mb OK (3 tests, 5 assertions)
4、为了快速定位缺陷,我们希望把注意力集中于相关的失败测试上。这就是为什么当某个测试所依赖的测试失败时,PHPUnit会跳过这个测试。通过利用测试之间的依赖关系,缺陷定位得到了改进。
如下案例phpunit2.php:
<?php class DependencyFailureTest extends PHPUnit_Framework_TestCase { public function testOne() { $this->assertTrue(FALSE); } /** * @depends testOne */ public function testTwo() { } } ?>
5、执行结果
phpunit phpunit2.php PHPUnit 3.7.27 by Sebastian Bergmann. FS Time: 2 ms, Memory: 4.00Mb There was 1 failure: 1) DependencyFailureTest::testOne Failed asserting that false is true. /home/wwwroot/local.guazi.com/webroot/phpunit2.php:6 FAILURES! Tests: 1, Assertions: 1, Failures: 1, Skipped: 1.
6、测试可以使用多于一个@depends标注。PHPUnit不会更改测试的运行顺序,因此你需要自行保证某个测试所依赖的所有测试均出现于这个测试之前。
拥有多个@depends标注的测试,其第一个参数是第一个生产者提供的基境,第二个参数是第二个生产者提供的基境,以此类推
案例phpunit3.php
<?php class MultipleDependenciesTest extends PHPUnit_Framework_TestCase { public function testProducerFirst() { $this->assertTrue(true); return 'first'; } public function testProducerSecond() { $this->assertTrue(true); return 'second'; } /** * @depends testProducerFirst * @depends testProducerSecond */ public function testConsumer() { $this->assertEquals( array('first', 'second'), func_get_args() ); } } ?>
7、执行结果
phpunit phpunit3.php PHPUnit 3.7.27 by Sebastian Bergmann. ... Time: 4 ms, Memory: 4.25Mb OK (3 tests, 3 assertions)