美文网首页
PHPUnit 自动化单元测试

PHPUnit 自动化单元测试

作者: PengFuChuan | 来源:发表于2017-07-20 15:07 被阅读0次

    一、安装phpunit

    ➜ wget https://phar.phpunit.de/phpunit.phar //最新版本支持 PHP 7.0, 和 PHP 7.1
    ➜ wget https://phar.phpunit.de/phpunit-5.7.phar //支持于 PHP 5.6, PHP 7.0 和 PHP 7.1,PHPUnit 5 将于2018年02月02日结束维护支持,目前还是建议使用5.7版本

    ➜ chmod +x phpunit-5.7.phar

    ➜ sudo mv phpunit-5.7.phar /usr/local/bin/phpunit

    ➜ phpunit --version

    二、搭建测试项目

    本次测试项目的目录结构如下

    ├── phpunit.xml
    ├── src
    │   ├── autoload.php
    │   ├── Money.php
    └── tests
        └── MoneyTest.php
    

    自动载入代码

    <?php
    
    function __autoload($class){
        include $class.'.php';
    }
    
    spl_autoload_register('__autoload');
    

    项目代码在src/Money.php

    <?php
    
    class Money
    {
        public $amount;
    
        public function __construct($amount)
        {
            $this->amount = $amount;
        }
    
        public function getAmount()
        {
            return $this->amount;
        }
    
        public function negate()
        {
            return new Money(-1*$this->amount);
        }
    }
    

    与之对应的单元测试是tests目录下的MoneyTest.php,注意单元测试文件名以*Test.php,这样以后指定tests目录便可以执行目录下的所有测试。

    <?php
    
    class MoneyTest extends PHPUnit_Framework_TestCase
    {
        public function testCanBeNegated()
        {
            $a = new Money(1);
    
            $b = $a->negate();
    
            $this->assertEquals(-1, $b->getAmount());
        }
    }
    

    三、实战

    • 快速体验

    经过第二部测试项目的搭建,我们可以运行底下的命令快速查看测试结果

    1、第一种方式

    phpunit --bootstrap src/Money.php tests/MoneyTest.php
    
    #运行结果
    [root@s2 auto_test]# phpunit --bootstrap src/Money.php tests/MoneyTest.php 
    PHPUnit 5.7.21 by Sebastian Bergmann and contributors.
    .                                                                   1 / 1 (100%)
    Time: 94 ms, Memory: 12.00MB
    
    OK (1 test, 1 assertion)
    

    2、第二种方式

    #第二种方式跟第一种基本一样,只不过是变成是自动引入
    phpunit --bootstrap src/autoload.php tests/MoneyTest
    
    #运行结果
    [root@s2 auto_test]# phpunit --bootstrap src/autoload.php tests/MoneyTest
    PHPUnit 5.7.21 by Sebastian Bergmann and contributors.
    .                                                                   1 / 1 (100%)
    
    Time: 87 ms, Memory: 12.00MB
    
    OK (1 test, 1 assertion)
    

    3、第三种方式

    #如果要执行MoneyTest,在项目根目录下执行:
    phpunit tests/MoneyTest
    
    #如果要执行tests目录下的所有测试,在项目根目录下执行:
    phpunit tests
    

    4、第四种方式
    虽然可以自动载入,但是要执行的命令更长了。我们还可以写一个配置文件来为项目指定bootstrap,这样就不用每次都写在命令里了

    #展示了一个最小化的 phpunit.xml 例子,它将在递归遍历 tests 时添加所有在 *Test.php 文件中找到的 *Test 类
    <phpunit bootstrap="src/autoload.php">
        <testsuites>
            <testsuite name="money">
                <directory>tests</directory>
            </testsuite>
        </testsuites>
    </phpunit>
    
    #指定文件测试顺序
    <phpunit bootstrap="src/autoload.php">
        <testsuites>
            <testsuite name="money">
                <file>tests/HelloTest.php</file>
                <file>tests/MoneyTest.php</file>
                <file>tests/SiteTest.php</file>
            </testsuite>
        </testsuites>
    </phpunit>
    

    github 地址 https://github.com/BGGANF/phpunit.git

    相关文章

      网友评论

          本文标题:PHPUnit 自动化单元测试

          本文链接:https://www.haomeiwen.com/subject/iyzdkxtx.html