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。