先了解一下大概情况吧
这里利用的thinkphp 内置的test的扩展,对应的phpunit的版本为phpunit6版本。尽管是旧版本,做一些简单的测试还是可以的
安装phpunit
➜ 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目录
如何进行测试
下面举一个例子
我们先写一个简单的service,然后在test 目录里面 写入
现在就完成了一个简单地测试。测试这个service是否按照我们的想法进行运算。
我们使用命令行在根目录下 输入 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)
以上内容就是最简单的测试方法。合理利用这些方法。可以让你的程序更加健壮。