数据库 - Model 前置说明
官方开源项目 抓取代理IP

介绍

@TestCase()注解,主要用于绑定单元测试用例。

单元测试注解支持,主要实现,通过使用\x\Db()->test()方法标记声明Db语句,
同时在注解中通过@TestCase()注解元,绑定对应的测试用例,
再通过CMD命令行,使用php sw-x test [服务类型] [路由地址]的方式,发起单元测试调试。

标记声明Db语句,在单元测试时可防止DAO污染,达到数据隔离的效果。

同时,同一条路由地址,可以绑定多个@TestCase()单元测试用例,会按绑定顺序依次执行。

用法

场景:绑定单元测试用例。
支持:HTTPWebSocket
注解:@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{}方法。
  • 当申明了Db数据隔离标识时,用例类中其对应的数据申明,应该以成员变量的方式进行存储,访问权限只能为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就能查看到对应的测试结果。
效果如下图:


而如果我们直接在浏览器中访问这个路由,则不受影响。

SW-X

企业级 - 高性能 PHP 框架

最后更新:3年前 . 作者-小黄牛

本篇目录