Laravel 5.1 测试系列 —— PHPUnit 安装及简单单元测试示例


1、概述及配置

Laravel 中集成了PHPUnit进行单元测试,实际上,使用PHPUnit进行单元测试在Laravel中是开箱即用的,测试的配置文件为根目录下的phpunit.xml,该配置文件为我们做好了所有配置工作:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <phpunit backupGlobals="false"
  3. backupStaticAttributes="false"
  4. bootstrap="bootstrap/autoload.php"
  5. colors="true"
  6. convertErrorsToExceptions="true"
  7. convertNoticesToExceptions="true"
  8. convertWarningsToExceptions="true"
  9. processIsolation="false"
  10. stopOnFailure="false"
  11. syntaxCheck="false">
  12. <testsuites>
  13. <testsuite name="Application Test Suite">
  14. <directory>./tests/</directory>
  15. </testsuite>
  16. </testsuites>
  17. <filter>
  18. <whitelist>
  19. <directory suffix=".php">app/</directory>
  20. </whitelist>
  21. </filter>
  22. <php>
  23. <env name="APP_ENV" value="testing"/>
  24. <env name="CACHE_DRIVER" value="array"/>
  25. <env name="SESSION_DRIVER" value="array"/>
  26. <env name="QUEUE_DRIVER" value="sync"/>
  27. </php>
  28. </phpunit>

testsuites中定义了测试文件存放路径为根目录下的tests目录。

filter中定义了需要进行单元测试的PHP文件存放位置。

php中配置了测试环境的环境变量,默认APP_ENV为testing,缓存驱动被设置为array,Session驱动被设置为array,队列驱动被设置为sync

2、安装PHPUnit

使用Laravel的测试功能之前需要先安装PHPUnit,以Homestead虚拟机为例,安装步骤如下:

  1. wget https://phar.phpunit.de/phpunit.phar
  2. chmod +x phpunit.phar
  3. sudo mv phpunit.phar /usr/local/bin/phpunit

然后查看PHPUnit的版本验证是否安装成功:

  1. phpunit --version

3、使用PHPUnit实现简单测试

接下来我们使用Laravel提供的ExampleTest.php实现简单单元测试,首先我们修改tests目录下的ExampleTest.php文件如下:

  1. <?php
  2.  
  3. use Illuminate\Foundation\Testing\WithoutMiddleware;
  4. use Illuminate\Foundation\Testing\DatabaseMigrations;
  5. use Illuminate\Foundation\Testing\DatabaseTransactions;
  6.  
  7. class ExampleTest extends TestCase
  8. {
  9. /**
  10. * A basic functional test example.
  11. *
  12. * @return void
  13. */
  14. public function testBasicExample()
  15. {
  16. $this->visit('/')
  17. ->see('Laravel学院');
  18. }
  19. }

其中visit方法用于访问指定路由页面,see方法则判断返回响应中是否包含指定字符串。

然后在routes.php中确保包含如下路由(如果没有的话添加该路由):

  1. Route::get('/',function(){
  2. return view('welcome');
  3. });

访问http://laravel.app:8000/,页面显示如下内容:

Laravel学院测试应用首页

然后到项目根目录下运行如下命令:

  1. phpunit

输出结果如下:

Laravel单元测试通过页面

表示测试通过。

接下来我们修改ExampleTest.php测试方法如下:

  1. public function testBasicExample()
  2. {
  3. $this->visit('/')
  4. ->see('LaravelAcademy');
  5. }

再次运行phpunit,则显示测试失败信息(部分截图):

Laravel单元测试失败输出

……

Laravel单元测试失败输出

测试结果会显示错误数目,错误位置及错误原因,方便我们快速定位错误并进行修复。

以上只是一个简单的测试示例,更多测试方法可查看Laravel测试文档。