先了解一下大概状况吧
这里利用的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)
以上内容就是最简单的测试方法。合理利用这些方法。可让你的程序更加健壮。