PHPUnit 是一个用PHP编程语言开发的开源软件,是一个单元测试框架。PHPUnit由Sebastian Bergmann创建,源于Kent Beck的SUnit,是xUnit家族的框架之一。

单元测试是对单独的代码对象进行测试的过程,比如对函数、类、方法进行测试。单元测试可以使用任意一段已经写好的测试代码,也可以使用一些已经存在的测试框架,比如JUnit、PHPUnit或者Cantata++,单元测试框架提供了一系列共同、有用的功能来帮助人们编写自动化的检测单元,例如检查一个实际的值是否符合我们期望的值的断言。单元测试框架经常会包含每个测试的报告,以及给出你已经覆盖到的代码覆盖率。

总之一句话,使用 phpunit 进行自动测试,会使你的代码更健壮,减少后期维护的成本,也是一种比较标准的规范,现如今流行的PHP框架都带了单元测试,如Laraval,Symfony,Yii2等,单元测试已经成了标配。

另外,单元测试用例是通过命令操控测试脚本的,而不是通过浏览器访问URL的。

这里以phpstorm为例,说明如何利用phpunit做单元测试。

1 下载php7

安装本地php7.0.x的版本,在mac里边安装比较简单:

brew install php@7.0

在windows里边,可以在php官网下载安装:https://windows.php.net/download#php-7.0

2 下载phpunit

由于框架在php7.0下使用,因此应该选择对应的phpunit版本。

wget https://phar.phpunit.de/phpunit-6.phar -O phpunit
chmod a+x phpunit

也可以不用下载,在项目中加入composer的依赖,执行composer update即可。

composer require "phpunit/phpunit:6.5.*" --dev

3 配置php

配置php的版本及路径等
configure-php.png

如果没有配置过本地的CLI Interpreter,可以点击右侧的“…”配置一下。
cli.png

4 配置phpunit

在phpstorm的设置里边对phpunit进行相关配置
phpunit.png

5 配置文件

例子

<phpunit
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/6.5/phpunit.xsd"
colors="true"
bootstrap="vendor/autoload.php"
>
<testsuites>
<testsuite name="hapn">
<directory suffix="Test.php" phpVersion="7.0.0" phpVersionOperator=">=">./tests/</directory>
</testsuite>
</testsuites>
</phpunit>

如上,上述文件定义了如下行为:

  • 执行phpunit前,肯定会加载vendor/autoload.php文件,
  • 会对tests目录的已Test.php结尾的文件进行测试
  • php版本要求在7.0.0以上(包含)

6 编写测试用例

接下来可以在tests目录编写测试用例了,一个典型的测试用例如下:

<?php
// tests/AesEncryptorTest.php
namespace foo\bar\lib\tests\encrypt;
use foo\bar\lib\encrypt\AesEncryptor;
use PHPUnit\Framework\TestCase;
class AesEncryptorTest extends TestCase
{
public function testDecrypt()
{
$decrypted = '234234xxxxxxx2342sdfs';
$original = '18600311028';
$encryptor = new AesEncryptor();
$result = $encryptor->decrypt($decrypted);
// 断言结果和$original是一致的
$this->assertEquals($original, $result);
}
...

接下来就可以在phpstorm里边测试了
begin-test.png

测试结果如下:
test-result.png

标签: php, phpstorm, phpunit

添加新评论