PHPUnit返回结果可以告诉我们执行时间、占用内存、错误数量、错误文件及代码行号,这不仅帮助我们测试了代码,还帮我们快速定位了bug。
安装PHPUnit
创建项目目录
mkdir -p myapp/src
创建composer.json
1 2
| cd myapp touch composer.json
|
composer.json
1 2 3 4 5 6 7
| { "autoload": { "classmap": [ "src/" ] } }
|
composer安装PHPUnit
composer require --dev phpunit/phpunit ^9
检查是否安装成功
./vendor/bin/phpunit --version
代码示例
创建PHP文件
mkdir -p src/test
touch src/test/StackTest.php
简单编写一个单文件,使用PHP数组模拟一个栈。
如果是针对类的测试,需要定义一个单元测试类,以ClassNameTest命名类名,例如:类名是User,测试类名称是UserTest,并且继承PHPUnit\Framework\TestCase
。
PHPUnit有很多断言方法,我们可以根据需求选用断言方法。
StackTest.php代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| <?php require_once __DIR__ . '/../../vendor/autoload.php'; use PHPUnit\Framework\TestCase; class stackTest extends TestCase { // 方法名以test开头,或者在文档注释块中使用@test标注 public function testPushAndPop () { /** * 断言方法-assertEquals() * assertEquals(mixed $expected, mixed $actual[, string $message = '']) * 当两个变量预期值 $expected 和实际值 $actual 不相等时报告错误。 */ $stack = []; $this->assertEquals(0, count($stack)); array_push($stack, 'foo'); $this->assertEquals('foo', $stack[count($stack) - 1]); $this->assertEquals('foo', array_pop($stack)); // 故意写错,测试输出错误信息 $this->assertEquals(1, count($stack)); } }
|
运行PHPUnit
./vendor/bin/phpunit src/test/StackTest.php
输出结果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| PHPUnit 9.0.1 by Sebastian Bergmann and contributors.
F 1 / 1 (100%)
Time: 41 ms, Memory: 2.00 MB
There was 1 failure:
1) stackTest::testPushAndPop Failed asserting that 0 matches expected 1.
/root/work/myapp/src/test/StackTest.php:21
FAILURES! Tests: 1, Assertions: 4, Failures: 1.
|
返回结果可以告诉我们执行时间、占用内存、错误数量、错误文件及代码行号,这不仅帮助我们测试了代码,还帮我们快速定位了bug。