+ [misc] Add unit tests for testcaseZen::processCasesForBrowse() method

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
liugang
2025-11-12 17:45:45 +08:00
co-authored by Claude
parent 20b5f62897
commit 06e51a5268
2 changed files with 120 additions and 0 deletions
@@ -3395,4 +3395,18 @@ class testcaseZenTest
return $result;
}
/**
* Test processCasesForBrowse method.
*
* @param array $cases
* @access public
* @return array
*/
public function processCasesForBrowseTest(array $cases): array
{
$result = callZenMethod('testcase', 'processCasesForBrowse', [$cases]);
if(dao::isError()) return dao::getError();
return $result;
}
}
+106
View File
@@ -0,0 +1,106 @@
#!/usr/bin/env php
<?php
/**
title=测试 testcaseZen::processCasesForBrowse();
timeout=0
cid=0
- 步骤1:空数组输入 @0
- 步骤2:无场景的用例
- 第0条的id属性 @case_1
- 第0条的parent属性 @0
- 第0条的isScene属性 @~~
- 步骤3:有场景的用例 @3
- 步骤4:HTML转义标题处理第0条的title属性 @测试用例5<html>
- 步骤5:场景被删除的边界情况
- 第0条的id属性 @case_6
- 第0条的parent属性 @0
*/
// 1. 导入依赖(路径固定,不可修改)
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/lib/testcasezen.unittest.class.php';
// 2. zendata数据准备(根据需要配置)
$scene = zenData('scene');
$scene->id->range('1-5');
$scene->product->range('1{5}');
$scene->title->range('场景1,场景2,场景3,场景4,场景5');
$scene->parent->range('0,0,1,1,0');
$scene->grade->range('1,1,2,2,1');
$scene->path->range(',1,;,2,;,1,3,;,1,4,;,5,');
$scene->deleted->range('0{5}');
$scene->gen(5);
// 3. 用户登录(选择合适角色)
su('admin');
// 4. 创建测试实例(变量名与模块名一致)
$testcaseTest = new testcaseZenTest();
// 5. 强制要求:必须包含至少5个测试步骤
// 步骤1:空数组输入
$emptyCases = array();
r($testcaseTest->processCasesForBrowseTest($emptyCases)) && p() && e('0'); // 步骤1:空数组输入
// 步骤2:无场景的用例
$case1 = new stdClass();
$case1->id = 1;
$case1->title = '测试用例1';
$case1->scene = 0;
$case1->status = 'normal';
$case1->pri = 1;
$case2 = new stdClass();
$case2->id = 2;
$case2->title = '测试用例2';
$case2->scene = 0;
$case2->status = 'wait';
$case2->pri = 2;
$casesWithoutScene = array($case1, $case2);
r($testcaseTest->processCasesForBrowseTest($casesWithoutScene)) && p('0:id;0:parent;0:isScene') && e('case_1;0;~~'); // 步骤2:无场景的用例
// 步骤3:有场景的用例
$case3 = new stdClass();
$case3->id = 3;
$case3->title = '测试用例3';
$case3->scene = 1;
$case3->status = 'normal';
$case3->pri = 1;
$case4 = new stdClass();
$case4->id = 4;
$case4->title = '测试用例4';
$case4->scene = 1;
$case4->status = 'wait';
$case4->pri = 2;
$casesWithScene = array($case3, $case4);
r(count($testcaseTest->processCasesForBrowseTest($casesWithScene))) && p() && e('3'); // 步骤3:有场景的用例
// 步骤4:HTML转义标题处理
$case5 = new stdClass();
$case5->id = 5;
$case5->title = '测试用例5&lt;html&gt;';
$case5->scene = 0;
$case5->status = 'normal';
$case5->pri = 1;
$casesWithHtml = array($case5);
r($testcaseTest->processCasesForBrowseTest($casesWithHtml)) && p('0:title') && e('测试用例5<html>'); // 步骤4:HTML转义标题处理
// 步骤5:场景被删除的边界情况
$case6 = new stdClass();
$case6->id = 6;
$case6->title = '测试用例6';
$case6->scene = 99;
$case6->status = 'normal';
$case6->pri = 1;
$casesWithDeletedScene = array($case6);
r($testcaseTest->processCasesForBrowseTest($casesWithDeletedScene)) && p('0:id;0:parent') && e('case_6;0'); // 步骤5:场景被删除的边界情况