@TestCase()
注解,主要用于绑定单元测试用例。
单元测试注解支持,主要实现,通过使用\x\Db()->test()
方法标记声明Db语句,
同时在注解中通过@TestCase()
注解元,绑定对应的测试用例,
再通过CMD命令行,使用php sw-x test [服务类型] [路由地址]
的方式,发起单元测试调试。
标记声明Db语句,在单元测试时可防止DAO污染,达到数据隔离的效果。
同时,同一条路由地址,可以绑定多个@TestCase()
单元测试用例,会按绑定顺序依次执行。
场景:绑定单元测试用例。
支持:HTTP
、WebSocket
注解:@TestCase()
参数:
class=""
class
对应的用例类文件都应该存放在/box/testcase/
目录下,但不强制要求。title=""
注意:所有绑定了@TestCase()
单元测试用例的操作方法,如果都含有数据库操作,其Db语句,都应该使用\x\Db()->test()
方法,申明数据隔离标识,防止DAO在测试时被污染。
/box/testcase/
目录下\x\doc\lable\TestBasics
抽象基类,并实现public function getData() : array{}
和public function getHeaders() : array{}
方法。public
下面提供一个完整的测试demo:
1、HTTP控制器文件\app\http\Index.php
:
<?php
namespace app\http;
use x\controller\Http;
/**
* @Controller(prefix="")
*/
class Index extends Http
{
/**
* @TestCase(class="\box\testcase\index\test", title="用例一")
* @TestCase(class="\box\testcase\index\test", title="用例二")
* @TestCase(class="\box\testcase\index\test", title="用例三")
* @RequestMapping(route="/testcase", method="get", title="单元测试注解demo")
* @Ioc(class="\x\Db", name="Db")
*/
public function testcase() {
$list = $this->Db->name('admin')->test('A1')->find();
$this->Db->return();
if ($list['name'] == '1') {
return $this->fetch('使用测试用例');
} else {
return $this->fetch($list['name']);
}
}
}
2、单元测试文件\box\testcase\index\test.php
:
<?php
namespace box\testcase\index;
// 必须继承至单元测试抽象类
use \x\doc\lable\TestBasics;
class test extends TestBasics
{
/**
* A1-数据库DB
*/
public $A1 = [
'name' => '1',
];
// 返回请求数据结构
public function getData() : array
{
return [];
}
// 返回请求头
public function getHeaders() : array
{
return [];
}
}
这时候,我们在CMD命令行界面,输入php sw-x test http /testcase
就能查看到对应的测试结果。
效果如下图:
而如果我们直接在浏览器中访问这个路由,则不受影响。