单元测试对项目维护是很重要滴,一个好的项目先写单元测试,再写业务代码。
使用步骤:
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()
让测试失败