设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 数据 手机
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP测试结构PHPUnit基本使用

发布时间:2022-06-24 13:51 所属栏目:121 来源:互联网
导读:PHP测试框架PHPUnit基本使用 一、前言 在这篇文章中,我们使用 composer 的依赖包管理工具进行phpunit包安装和管理,composer 官方地址 https://getcomposer.org/,按照提示进行全局安装即可,另外,我们也会使用一个非常好用的Monolog记录日志组件记录日志
  PHP测试框架PHPUnit基本使用

  一、前言
 
  在这篇文章中,我们使用 composer 的依赖包管理工具进行phpunit包安装和管理,composer 官方地址 https://getcomposer.org/,按照提示进行全局安装即可,另外,我们也会使用一个非常好用的Monolog记录日志组件记录日志,方便我们查看。
 
  在根目录下建立 coomposer.json 的配置文件,输入以下内容:
 
  {
  
      "autoload": {
  
          "classmap": [
  
              "./"
  
          ]
  
      }
  
  }
  上面的意思是将根目录下的所有的类文件都加载进来, 在命令行执行 composer install 后,在根目录会生成出一个vendor的文件夹,我们以后通过 composer 安装的任何第三方代码都会被生成在这里。

  二、安装PHPUnit
 
  使用 composer 方式安装 PHPUnit,其他安装方式请看这里
 
  composer require --dev phpunit/phpunit ^6.2
 
  安装 Monolog 日志包,做 phpunit 测试记录日志用。
 
  composer require monolog/monolog
 
  安装好之后,我们可以看coomposer.json 文件已经有这两个扩展包了:
 
  "require": {   
  
       "monolog/monolog": "^1.23",
  
      },
  
  "require-dev": {
  
          "phpunit/phpunit": "^6.2"
  
      },
  
        三、PHPUnit简单用法
 
  1、单个文件测试
 
  创建目录tests,新建文件 StackTest.php,编辑如下:
 
  <?php
  
  /**
  
   * 1、composer 安装Monolog日志扩展,安装phpunit单元测试扩展包
  
   * 2、引入autoload.php文件
  
   * 3、测试案例
  
   *
  
   *
  
   */
  
  namespace App\tests;
  
  require_once __DIR__ . '/../vendor/autoload.php';
  
  define("ROOT_PATH", dirname(__DIR__) . "/");
  
  use Monolog\Logger;
  
  use Monolog\Handler\StreamHandler;
  
  use PHPUnit\Framework\TestCase;
  
  class StackTest extends TestCase
  
  {
  
      public function testPushAndPop()
  
      {
  
          $stack = [];
  
          $this->assertEquals(0, count($stack));
  
          array_push($stack, 'foo');
  
          // 添加日志文件,如果没有安装monolog,则有关monolog的代码都可以注释掉
  
          $this->Log()->error('hello', $stack);
  
          $this->assertEquals('foo', $stack[count($stack)-1]);
  
          $this->assertEquals(1, count($stack));
  
          $this->assertEquals('foo', array_pop($stack));
  
          $this->assertEquals(0, count($stack));
  
      }
  
      public function Log()
  
      {
  
          // create a log channel
  
          $log = new Logger('Tester');
  
          $log->pushHandler(new StreamHandler(ROOT_PATH . 'storage/logs/app.log', Logger::WARNING));
  
          $log->error("Error");
  
          return $log;
  
      }
  
  }
  代码解释:
 
  StackTest为测试类
 
  StackTest 继承于 PHPUnit\Framework\TestCase
 
  测试方法testPushAndPop(),测试方法必须为public权限,一般以test开头,或者你也可以选择给其加注释@test来表
 
  在测试方法内,类似于 assertEquals() 这样的断言方法用来对实际值与预期值的匹配做出断言。
 
  命令行执行:
 
  phpunit 命令 测试文件命名
 
  ➜  framework#  ./vendor/bin/phpunit tests/StackTest.php
 
  // 或者可以省略文件后缀名
 
  //  ./vendor/bin/phpunit tests/StackTest
 
  执行结果:
 
  ➜  framework# ./vendor/bin/phpunit tests/StackTest.php
 
  PHPUnit 6.4.1 by Sebastian Bergmann and contributors.
 
  .                                                                   1 / 1 (100%)
 
  Time: 56 ms, Memory: 4.00MB
 
  OK (1 test, 5 assertions)
 
  我们可以在app.log文件中查看我们打印的日志信息。

  命令执行:
 
  > ./vendor/bin/phpunit tests/CalculatorTest
 
  执行结果:
 
  PHPUnit 6.4.1 by Sebastian Bergmann and contributors.
  
  F                                                                   1 / 1 (100%)
  
  Time: 117 ms, Memory: 4.00MB
  
  There was 1 failure:
  如果我们把这里的断言故意写错,$this->assertEquals(1, $obj->sum(0, 0));
 
  看执行结果:
 
  PHPUnit 6.4.1 by Sebastian Bergmann and contributors.
  
  F                                                                   1 / 1 (100%)
  
  Time: 117 ms, Memory: 4.00MB
  
  There was 1 failure:
  
  1) App\tests\CalculatorTest::testSum
  
  Failed asserting that 0 matches expected 1.
  
  /Applications/XAMPP/xamppfiles/htdocs/web/framework/tests/CalculatorTest.php:22
  
  FAILURES!

  执行结果:
 
  PHPUnit 6.4.1 by Sebastian Bergmann and contributors.
 
  Wrote test class skeleton for Calculator to CalculatorTest.php.
 
  是不是很简单,因为没有测试数据,所以这里加测试数据,然后重新执行上边的命令
 
  <?php   
  
  class Calculator   
  
  {   
  
      /**  
  
       * @assert (0, 0) == 0  
  
       * @assert (0, 1) == 1  
  
       * @assert (1, 0) == 1  
  
       * @assert (1, 1) == 2  
  
       */  
  
      public function sum($a, $b)   
  
      {   
  
          return $a + $b;   
  
      }   
  
  }   
  
  ?>
  原始类中的每个方法都进行@assert注解的检测,这些被转变为测试代码,像这样
 
  /**
  
   * Generated from @assert (0, 0) == 0.
  
   */
  
  public function testSum() {
  
      $obj = new Calculator;
  
      $this->assertEquals(0, $obj->sum(0, 0));
  
  }
  执行结果:
 
  ./vendor/bin/phpunit tests/CalculatorTest
  
  PHPUnit 6.4.1 by Sebastian Bergmann and contributors.   
  ....   
  
  Time: 0 seconds     
  
  OK (4 tests)。
 

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读