一、PHPUnit是什么?
1、它是一款轻量级的框架,地址:
2、手册:
二、为什么要用PHPUnit?
1、可以通过命令操控测试脚本
2、可以测试性能
3、可以测试代码覆盖率
4、可以自动化的更新测试用例的参数数据
5、各种格式的日志
三、PHPUnit使用规则
1、 一般被测试类的后面加上”Test”,比如要测试的类为Array,则测试用例的命名为ArrayTest。
2、测试类ArrayTest继承于PHPUnit_Framework_TestCase
3、测试方法必须为public权限,都是test开头,或者你也可以选择给其加注释@test来表明该函数为测试函数
4、通过断言方法来对实际值和预期值进行断言,断言方法可以参照手册:
快速入门:
class ArrayTest extends PHPUnit_Framework_TestCase { //测试用例运行前初始化public function setUp(){}//测试用例运行后执行 public function tearDown(){}/*** @test*/public function testArrayIsEmpty(){ $fixture = array();// 断言数组$fixture中元素的数目是0。 $this->assertEquals(0, sizeof($fixture));}/*** @test*/public function testarrayHasKey(){ $arr = array('id'=>666,'name'=>'zhangsan',);//断言$arr是一个数组$this->assertTrue(is_array($arr));//断言数组$arr中含有索引id$this->assertArrayHasKey('id',$arr);//断言数组$arr中含有索引name$this->assertArrayHasKey('name',$arr);}} |
命令行启动测试用例:
phpunit 测试文件名,此处为要测试ArrayTest.php文件
phpunit ArrayTest.php PHPUnit 5.7.5 by Sebastian Bergmann and contributors. .. 2 / 2 (100%) Time: 138 ms, Memory: 3.25MB OK (2 tests, 4 assertions) |
记录测试日志:
日志多种格式:
phpunit ArrayTest.php --log-tap log.txt TAP version 13 ok 1 - ArrayTest::testArrayIsEmpty ok 2 - ArrayTest::testarrayHasKey 1..2 |
四、PHPUnit测试代码覆盖率
可以参考:
可以通过配置phpunit.xml设置需要测试的代码路径或文件
例如:phpunit.xml的配置(放在项目根目录)
1、通过生成html页面查看代码覆盖率
通过执行命令:phpunit --coverage-html ./coverage ./src/test
命令解释:
- --coverage-html:生成覆盖率结果的html
- coverage:html生成目录,可以重新定义
- ./src/test:测试用例目录(也可以是单个测试用例文件)
覆盖率结果:
可以看到目录里每个文件的覆盖率:
还可以清晰的看到每一个文件代码覆盖率:
2、通过生成的text文件查看代码覆盖率
通过执行命令:phpunit --coverage-text ./src/test > test.log
命令解释:
- --coverage-html:生成覆盖率结果的text
- ./src/test:测试用例目录(也可以是单个测试用例文件)
- > test.log:存放覆盖率结果的文件(文件名称自己定义)
覆盖率结果:
可以清晰的看到总覆盖率和每个文件的覆盖率。
覆盖率计算问题:
1、类:只有类中所有代码都执行了,覆盖率才为100%;
2、方法:类中的方法每一行都执行了,覆盖率才算100%。例如:类中有5个方法,有两个方法每一行执行了,覆盖率为:40%;
3、行:每一行代码都执行了就是100%;