phpstorm中使用phpunit进行单元测试
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的版本及路径等
如果没有配置过本地的CLI Interpreter,可以点击右侧的“…”配置一下。
4 配置phpunit
在phpstorm的设置里边对phpunit进行相关配置
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里边测试了
测试结果如下: