1.Pear的官方教程:https://phpunit.de/manual/current/zh_cn/phpunit-book.html#writing-tests-for-phpunitphp
2.将Pear的安装目录的路径,加入Path;在CMD中,执行 "pear list" ,html
若是没有,PHPUnit模块,执行数组
3.在php.ini文件的 include_path 路径,将pear的相关的文件路径加进去 ,这是个人:ide
4. 在编写测试文件时,直接include下面,是找不到TestCase类的,函数
会报错:测试
PHP Fatal error: Class 'TestCase' not found in H:\Slg\SlgCardsServer\actions\MyTest.php on line 26
这是,由于include_path路径下面的文件TestCase.php的TestCase并不存在,这是要本身编写的。this
5. 若是不使用本身编写的TestCase类,能够继承 PHPUnit_Framework_TestCase 类。这个类继承了PHPUnit_Framework_Assert,提供了一些基本的asset***的断言方法。spa
6.以下代码:code
1 <?php 2 3 include_once 'PHPUnit\TestCase.php'; 4 5 class Test extends PHPUnit_Framework_TestCase 6 { 7 public function testEmpty() 8 { 9 $stack = []; 10 $this->assertNotEmpty($stack); 11 12 return $stack; 13 } 14 15 /** 16 * @depends testEmpty 17 */ 18 public function testPush(array $stack) 19 { 20 array_push($stack, 'foo'); 21 $this->assertEquals('foo', $stack[count($stack)-1]); 22 $this->assertNotEmpty($stack); 23 24 return $stack; 25 } 26 27 /** 28 * @depends testPush 29 */ 30 public function testPop(array $stack) 31 { 32 $this->assertEquals('foo', array_pop($stack)); 33 $this->assertEmpty($stack); 34 } 35 } 36 37 ?>
当第一个函数的测试代码有问题时,运行结果:htm
7.多重依赖的代码测试:
1 <?php 2 include_once 'PHPUnit\TestCase.php'; 3 4 class Test extends PHPUnit_Framework_TestCase 5 { 6 public function testProduceFirst() 7 { 8 $this->assertTrue(true); 9 return 'First'; 10 } 11 12 public function testProduceSecond() 13 { 14 $this->assertTrue(true); 15 return 'Second'; 16 } 17 18 /** 19 * 下面的依赖 20 * @depends testProduceFirst 21 * @depends testProduceSecond 22 */ 23 public function testEquals() 24 { 25 return $this->assertEquals( 26 ['first','second'], 27 func_get_args() 28 ); 29 } 30 } 31 32 ?>
运行结果:
10 .数据提供器
1)数据供给器方法必须声明为 public,其返回值要么是一个数组,其每一个元素也是数组;要么是一个实现了 Iterator 接口的对象,在对它进行迭代时每步产生一个数组。每一个数组都是测试数据集的一部分,将以它的内容做为参数来调用测试方法。
2)测试代码:
1 <?php 2 include_once 'PHPUnit\TestCase.php'; 3 4 class DataProviderTest extends PHPUnit_Framework_TestCase 5 { 6 /** 7 * @dataProvider additionProvider 8 */ 9 public function testAdd($a,$b,$sum) 10 { 11 $this->assertEquals($sum,$a+$b); 12 } 13 14 public function additionProvider() 15 { 16 return [ 17 'Data1' => [1,2,3], 18 'Data2' => [4,7,9], 19 'Data3' => [5,4,9], 20 ]; 21 } 22 } 23 24 ?>
运行的结果:
要点:
1.文档注释块(docblock)中使用 @test
标注将其标记为测试方法,用 @depends
标注来表达测试方法之间的依赖关系。
2.若是须要传递对象的副本而非引用,则应当用 @depends clone
替代 @depends
。
3.PHPUnit 不会更改测试的运行顺序,所以你须要自行保证某个测试所依赖的全部测试均出现于这个测试以前。
4.若是出现找不到PHPUnit相关的头文件,能够用在相关文件输出get_include_path()的结果查看. 在php.ini 能够找 “”include_path" 关键字,定位缘由。
在 PHPUnit的目录下有一个文件Autoload.php,在设置了php.ini的include_path的变量以后,在使用文件中,包括该文件。
5.在安装XDebug的前提下(extension = XDEBUG_PATH 替换为 zend_extension = XDEBUG_PATH ),能够运行:phpunit --coverage-html "OUTPUT_PATH" CalculatorTest ,生成一个报表,HTML格式,能够了解这次测试代码的覆盖率。 默认在当前目录生成OUTPUT_PATH目录。
6.不要将被测试的类和测试类放在同一个文件,这样是生成的XDEBUG代码覆盖率报告数据都是空的。
7. 测试类里面的测试函数必定要以 "test"开头 !!!