单元测试对项目维护是很重要滴,一个好的项目先写单元测试,再写业务代码。
使用步骤:
1、下载phpunit。
我是在thinkphp6.0的框架中,composer require phpunit/phpunit复制代码
Laravel框架则是已经安装好了。
下载好后进入框架目录(本地环境,没有配置全局变量的情况下):vendor/bin
终端执行:./phpunit --version复制代码
成功的看到phpunit版本信息
2、使用phpunit
在app目录下创建test目录内,新建文件 FirstTest.php<?php
namespace app\test;
require_once '../../vendor/autoload.php';
use PHPUnit\Framework\TestCase;
class FirstTest extends TestCase
{ public function testTure()
{
$a = [];
$this->assertNull(100);
}
}复制代码
在vendor/bin目录中终端执行这个php文件:./phpunit ../../app/test/FirstTest
复制代码
可以看到测试结果。
3、讲道理,每个接口都应该写单元测试。
在对接口单元测试的时候;需要引入该文件,new这个对象调用方法。
thinkphp6:<?php
namespace app\test;
require_once '../../vendor/autoload.php'
use app\admin\controller\Index;
use PHPUnit\Framework\TestCase;
class FirstTest extends TestCase
{
public function testTure()
{
$obj = new Index;
$this->assertEquals(0,$obj->index(2,3);
}
}复制代码
Laravel(比较清晰):<?phpnamespace
Tests\Feature;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
use Illuminate\Support\Facades\Storage;
class ExampleTest extends TestCase{
/**
* A basic test example.
*
* @return void
*/
public function testBasicTest()
{
$response = $this->json('POST','/api/loginConfirm',['loginInfo'=>['username'=>'chen', 'password'=>'peng']]);
$response->assertStatus(200)->assertJson(['code'=>200]);
}
public function testLogoutTest()
{
$response = $this->json('PUT','/api/logout');
$response->assertJson(['code'=>200]);
}
}复制代码
tests目录下有测试目录和文件
测试语法看文档。
断言核心方法
assertArrayEquals(expecteds, actuals)
查看两个数组是否相等。
assertEquals(expected, actual)
查看两个对象是否相等。类似于字符串比较使用的equals()方法
assertNotEquals(first, second)
查看两个对象是否不相等。
assertNull(object)
查看对象是否为空。
assertNotNull(object)
查看对象是否不为空。
assertSame(expected, actual)
查看两个对象的引用是否相等。类似于使用“==”比较两个对象
assertNotSame(unexpected, actual)
查看两个对象的引用是否不相等。类似于使用“!=”比较两个对象
assertTrue(condition)
查看运行结果是否为true。
assertFalse(condition)
查看运行结果是否为false。
assertThat(actual, matcher)
查看实际值是否满足指定的条件
fail()
让测试失败