Laravel 中集成了PHPUnit进行单元测试,实际上,使用PHPUnit进行单元测试在Laravel中是开箱即用的,测试的配置文件为根目录下的phpunit.xml
,该配置文件为我们做好了所有配置工作:
- <?xml version="1.0" encoding="UTF-8"?>
- <phpunit backupGlobals="false"
- backupStaticAttributes="false"
- bootstrap="bootstrap/autoload.php"
- colors="true"
- convertErrorsToExceptions="true"
- convertNoticesToExceptions="true"
- convertWarningsToExceptions="true"
- processIsolation="false"
- stopOnFailure="false"
- syntaxCheck="false">
- <testsuites>
- <testsuite name="Application Test Suite">
- <directory>./tests/</directory>
- </testsuite>
- </testsuites>
- <filter>
- <whitelist>
- <directory suffix=".php">app/</directory>
- </whitelist>
- </filter>
- <php>
- <env name="APP_ENV" value="testing"/>
- <env name="CACHE_DRIVER" value="array"/>
- <env name="SESSION_DRIVER" value="array"/>
- <env name="QUEUE_DRIVER" value="sync"/>
- </php>
- </phpunit>
testsuites
中定义了测试文件存放路径为根目录下的tests
目录。
filter
中定义了需要进行单元测试的PHP文件存放位置。
php
中配置了测试环境的环境变量,默认APP_ENV为testing
,缓存驱动被设置为array
,Session驱动被设置为array
,队列驱动被设置为sync
。
使用Laravel的测试功能之前需要先安装PHPUnit,以Homestead虚拟机为例,安装步骤如下:
- wget https://phar.phpunit.de/phpunit.phar
- chmod +x phpunit.phar
- sudo mv phpunit.phar /usr/local/bin/phpunit
然后查看PHPUnit的版本验证是否安装成功:
- phpunit --version
接下来我们使用Laravel提供的ExampleTest.php
实现简单单元测试,首先我们修改tests
目录下的ExampleTest.php
文件如下:
- <?php
- use Illuminate\Foundation\Testing\WithoutMiddleware;
- use Illuminate\Foundation\Testing\DatabaseMigrations;
- use Illuminate\Foundation\Testing\DatabaseTransactions;
- class ExampleTest extends TestCase
- {
- /**
- * A basic functional test example.
- *
- * @return void
- */
- public function testBasicExample()
- {
- $this->visit('/')
- ->see('Laravel学院');
- }
- }
其中visit
方法用于访问指定路由页面,see
方法则判断返回响应中是否包含指定字符串。
然后在routes.php
中确保包含如下路由(如果没有的话添加该路由):
- Route::get('/',function(){
- return view('welcome');
- });
访问http://laravel.app:8000/
,页面显示如下内容:
然后到项目根目录下运行如下命令:
- phpunit
输出结果如下:
表示测试通过。
接下来我们修改ExampleTest.php
测试方法如下:
- public function testBasicExample()
- {
- $this->visit('/')
- ->see('LaravelAcademy');
- }
再次运行phpunit
,则显示测试失败信息(部分截图):
……
测试结果会显示错误数目,错误位置及错误原因,方便我们快速定位错误并进行修复。
以上只是一个简单的测试示例,更多测试方法可查看Laravel测试文档。