ThinkPHP 利用PHPUnit 进行简单的测试

 

先了解一下大概状况吧

这里利用的thinkphp 内置的test的扩展,对应的phpunit的版本为phpunit6版本。尽管是旧版本,作一些简单的测试仍是能够的php

 

安装phpunitthinkphp

➜ wget http://phar.phpunit.cn/phpunit.phar

➜ chmod +x phpunit.phar

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

➜ phpunit --version

安装thinkphp的test扩展数据库

composer require topthink/think-testing=2.0.*

 安装完成以后,thinkphp目录下会多一个test目录数组

 

 

 

 

 

 

 

 

 

 

 

 

 

 

安装完成以后,thinkphp目录下会多一个test目录app

 

如何进行测试

下面举一个例子composer

咱们先写一个简单的service,而后在test 目录里面 写入框架

如今就完成了一个简单地测试。测试这个service是否按照咱们的想法进行运算。ide

咱们使用命令行在根目录下 输入 php think unit函数

显示测试完毕,正常显示。测试

 

断言函数

断言函数名(数组) 做用 断言函数名(对象) 做用 断言函数名(类) 做用
assertEquals 断言等于 assertAttributeContains 断言属性包含 assertClassHasAttribute 断言类有某属性
assertNotEquals 断言不等于 assertAttributeContainsOnly 断言属性只包含 assertClassHasStaticAttribute 断言类有某静态属性
assertArrayHasKey 断言有键 assertAttributeEquals 断言属性等于 assertClassNotHasAttribute 断言类没有某属性
assertArrayNotHasKey 断言没有键 assertAttributeGreaterThan 断言属性大于 assertClassNotHasStaticAttribute 断言类没有某静态属性
assertContains 断言包含 assertAttributeGreaterThanOrEqual 断言属性大于等于    
assertNotContains 断言不包含 assertAttributeLessThan 断言属性小于    
assertContainsOnly 断言只包含 assertAttributeLessThanOrEqual 断言属性小于等于    
assertNotContainsOnly 断言不仅包含 assertAttributeNotContains 断言不包含    
    assertAttributeNotContainsOnly 断言属性不仅包含    
    assertAttributeNotEquals 断言属性不等于    
    assertAttributeNotSame 断言属性不相同    
    assertAttributeSame 断言属性相同    
    assertSame 断言类型和值都相同    
    assertNotSame 断言类型或值不相同    
    assertObjectHasAttribute 断言对象有某属性    
   

assertObjectNotHasAttribute

断言对象没有某属性    
断言函数名(文件) 做用 断言函数名(XML) 做用
assertFileEquals 断言文件内容等于 assertXmlFileEqualsXmlFile 断言XML文件内容相等
assertFileExists 断言文件存在 assertXmlFileNotEqualsXmlFile 断言XML文件内容不相等
assertFileNotEquals 断言文件内容不等于 assertXmlStringEqualsXmlFile 断言XML字符串等于XML文件内容
assertFileNotExists 断言文件不存在 assertXmlStringEqualsXmlString 断言XML字符串相等
    assertXmlStringNotEqualsXmlFile 断言XML字符串不等于XML文件内容
    assertXmlStringNotEqualsXmlString 断言XML字符串不相等

以上内容的assertEquals是全部断言函数的一种,具体用法能够自行百度,本文章往后会慢慢补充完毕。

 

基镜

目前以上内容已经能够测试每个service的运行情况。可是有一部分service 须要有运行的前提条件,咱们把建立基础环境或者依赖制做成可测试的状态成为基镜的搭建。

举个栗子,好比咱们在测试新增管理员的时候须要依赖某个数据库的某个值。那么咱们能够试试如下方法

<?php

namespace tests;

class ExampleTest extends TestCase
{
    protected $a;

    protected function setUp(): void
    {
        parent::setUp();
        //假设这里咱们从数据库中查询出来的a的值为1
        $this->a=1;
    }
    

    public function testplanService():void
    {
        $test=new \app\index\service\Test;
        //这里咱们能够灵活的使用这个a的值。不须要手动输入固定的值
        $this->assertEquals(2,$test->planService($this->a,1));
    }
}

测试数据的移除

咱们在测试的时候不免会产生一系列测试数据,咱们如何在测试完毕以后删除这些数据呢,看看如下的例子

<?php

namespace tests;

class ExampleTest extends TestCase
{
    protected $a;

    protected function setUp(): void
    {
        parent::setUp();
        $this->a=1;
    }
    

    public function testplanService():void
    {
        $test=new \app\index\service\Test;
        $this->assertEquals(2,$test->planService($this->a,1));
    }


    //运行测试完毕以后,测试框架会自动调用该类销毁数据库的插入数据等等
    protected function tearDown(): void
    {
        $this->assertEquals(1,1);
        //销毁数据操做
    }
}

数据供给器

如今假设有以下状况。

插入一个管理员记录,要求管理员的帐号长度大于6位,小于9位。首字母大写等等。咱们不可能一种状况一个个去测试,对于这种状况,咱们能够利用数据供给器来提供批量的数据。

咱们新建一个service类

<?php

namespace app\index\service;

class Admin
{
    public function add(string $username,string $password):bool
    {
        if(!preg_match('/^[A_Z]\S{6,8}$/',$username))
        {
            return false;
        }
        return true;
    }
}

下面咱们补上测试代码

<?php
namespace tests;

use think\testing\TestCase;

class AddTest extends TestCase
{
    protected $add;

    protected function setUp(): void
    {
        $this->add=new \app\index\service\Admin;
    }

    /**
     * @dataProvider addData
     * @param string $usernmae
     * @param string $password
     */
    public function testAdd(string $username,string $password):void
    {
        $this->assertFalse($this->add->add($username,$password));
    }

    /**
     * 测试状况为true
     *
     * @return void
     */
    public function testAdd_true():void
    {
        //断言为true
        $this->assertTrue($this->add->add('A123456','1111'));
    }

    //add 方法数据供给器
    public function addData()
    {
        return [
            //数据小于6位
            ['s123','1111'],
            //数据大于9位
            ['A123456789','1111'],
            //首字符小写
            ['s1234567','1111']
        ];
    }
}

补上结果

localhost:think yehua$ php think unit
PHPUnit 6.5.14 by Sebastian Bergmann and contributors.

....                                                                4 / 4 (100%)

Time: 92 ms, Memory: 6.00MB

OK (4 tests, 4 assertions)

以上内容就是最简单的测试方法。合理利用这些方法。可让你的程序更加健壮。

相关文章
相关标签/搜索