安装
linux和windows用户均可以使用composer进行PHPUNIT的安装,默认安装最新版
composer global require phpunit/phpunit
装完后可以运行phpunit --version查看是否安装成功及版本号,如图
安装好了之后可以在laravel项目根目录下执行,laravel是自带一个tests目录和一些测试文件的,当然也有自带的phpunit.xml配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
bootstrap="vendor/autoload.php"
colors="true"
>
<testsuites>
<testsuite name="Unit">
<directory suffix="Test.php">./tests/Unit</directory>
</testsuite>
<!-- <testsuite name="Feature">-->
<!-- <directory suffix="Test.php">./tests/Feature</directory>-->
<!-- </testsuite>-->
</testsuites>
<coverage processUncoveredFiles="true">
<include>
<directory suffix=".php">./app</directory>
</include>
</coverage>
<php>
<server name="APP_ENV" value="testing"/>
<server name="BCRYPT_ROUNDS" value="4"/>
<server name="CACHE_DRIVER" value="array"/>
<!-- <server name="DB_CONNECTION" value="sqlite"/> -->
<!-- <server name="DB_DATABASE" value=":memory:"/> -->
<server name="MAIL_MAILER" value="array"/>
<server name="QUEUE_CONNECTION" value="sync"/>
<server name="SESSION_DRIVER" value="file"/>
<server name="TELESCOPE_ENABLED" value="false"/>
</php>
</phpunit>
配置解释
bootstrap="./vendor/autoload.php"
在测试之前加载的的PHP 文件,一般可以做一个初始化工作
<testsuites>
<testsuite name="Unit">
<directory suffix="Test.php">./tests/Unit</directory>
</testsuite>
<!-- <testsuite name="Feature">-->
<!-- <directory suffix="Test.php">./tests/Feature</directory>-->
<!-- </testsuite>-->
</testsuites>
测试套件,如果想测试页面,action,model 可以多加几个测试套件
name: 套件名称
directory :套件测试的目录,目录下一般放测试文件的用例
suffix :测试文件后缀,如果不填写,则默认后缀为*Test.php,即phpunit 默认会执行*Test.php 的文件
action:测试目录名
file:可以单独设置测试文件
exclude:排除不需要测试的文件
<filter> 元素及其子元素用于配置代码覆盖率报告所使用的白名单。
blacklist 黑名单(不需要统计覆盖率的文件),whitelist 白名单(统计覆盖率的测试文件) 当黑名单与白名单文件重复时,白名单起作用
<server name="APP_ENV" value="false"/> 环境配置
这里简单介绍了phpunit.xml的配置及解释,更多的配置可以看官网,传送门
3. XML 配置文件 — PHPUnit latest 手册
现在咱们来看看tests目录下的Unit目录下的ExampleTest.php文件
<?php
namespace Tests\Unit;
use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;
class ExampleTest extends TestCase
{
/**
* A basic test example.
*
* @return void
*/
public function testBasicTest()
{
$this->assertTrue(true);
}
}
其中包含了一行最基本的断言测试,用于判断指定的参数是否为真,并且这个测试永远是通过的。Laravel 的单元测试其实是原原本本继承了 PHPUnit 的单元测试功能,这里的父类 Tests\TestCase
从根源上继承自 PHPUnit\Framework\TestCase
,所以我们可以在测试用例中使用所有 PHPUnit 支持的断言方法和测试注解。
执行结果:
当现实小绿条的时候就意味着测试通过了,咱们再来看看失败的例子,咱们在ExampleTest.php中新增一个方法test_example2:
<?php
namespace Tests\Unit;
use PHPUnit\Framework\TestCase;
class ExampleTest extends TestCase
{
/**
* A basic test example.
*
* @return void
*/
public function test_example()
{
$this->assertTrue(true);
}
/**
* A basic test example.
*
* @return void
*/
public function test_example2()
{
$this->assertTrue(false);
}
}
再来看执行结果;
小红条出现了,意思是在test_example2方法中断言失败,可以看到,单元测试会一次性的执行所有测试方法,如果失败的话,也会自动定位到失败的方法,想象一下,如果有100个方法,如果让你手动去找bug是不是很头疼,用单元测试就可以解决这个问题。
phpunit还有很多断言的方法,可以参考phpunit官方文档
传送门1. 断言 — PHPUnit latest 手册