+ [misc] Add unit tests for testcaseZen::prepareReviewData() 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:44 +08:00
co-authored by Claude
parent ca0753cd2b
commit f9be43c902
2 changed files with 168 additions and 0 deletions
@@ -3316,4 +3316,70 @@ class testcaseZenTest
}
}
/**
* Test prepareReviewData method.
*
* @param int $caseID
* @param object $oldCase
* @param array $postData
* @access public
* @return bool|object|array
*/
public function prepareReviewDataTest(int $caseID, object $oldCase, array $postData = array()): bool|object|array
{
global $tester;
// 保存原始POST数据
$originalPost = $_POST;
try {
// 清除之前的错误
dao::$errors = array();
// 设置POST数据
$_POST = array();
foreach($postData as $key => $value)
{
$_POST[$key] = $value;
}
// 获取testcase的zen对象实例
$zenClass = initReference('testcase');
$zenInstance = $zenClass->newInstance();
// 使用反射调用protected方法
$reflection = new ReflectionClass($zenInstance);
$method = $reflection->getMethod('prepareReviewData');
$method->setAccessible(true);
// 调用方法
$returnValue = $method->invoke($zenInstance, $caseID, $oldCase);
// 恢复原始POST数据
$_POST = $originalPost;
// 如果返回false并且有错误,返回错误信息
if($returnValue === false && dao::isError())
{
return dao::getError();
}
return $returnValue;
} catch (EndResponseException $e) {
// 恢复原始POST数据
$_POST = $originalPost;
// EndResponseException通常表示正常的流程控制,检查是否有dao错误
if(dao::isError()) return dao::getError();
return false;
} catch (Exception $e) {
// 恢复原始POST数据
$_POST = $originalPost;
return array('exception' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine());
} catch (Error $e) {
// 恢复原始POST数据
$_POST = $originalPost;
return array('error' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine());
}
}
}
+102
View File
@@ -0,0 +1,102 @@
#!/usr/bin/env php
<?php
/**
title=测试 testcaseZen::prepareReviewData();
timeout=0
cid=0
- 执行testcaseTest模块的prepareReviewDataTest方法,参数是1, $oldCase1, $postData1
- 属性status @normal
- 属性result @pass
- 执行testcaseTest模块的prepareReviewDataTest方法,参数是2, $oldCase2, $postData2
- 属性status @normal
- 属性result @fail
- 执行testcaseTest模块的prepareReviewDataTest方法,参数是3, $oldCase3, $postData3 @0
- 执行testcaseTest模块的prepareReviewDataTest方法,参数是4, $oldCase4, $postData4
- 属性status @normal
- 属性reviewedBy @admin,user1,user2
- 执行testcaseTest模块的prepareReviewDataTest方法,参数是5, $oldCase5, $postData5
- 属性status @normal
- 属性reviewedBy @admin
*/
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/lib/testcasezen.unittest.class.php';
su('admin');
$testcaseTest = new testcaseZenTest();
// 创建测试用例对象
$oldCase1 = new stdClass();
$oldCase1->id = 1;
$oldCase1->status = 'wait';
$oldCase2 = new stdClass();
$oldCase2->id = 2;
$oldCase2->status = 'normal';
$oldCase3 = new stdClass();
$oldCase3->id = 3;
$oldCase3->status = 'wait';
$oldCase4 = new stdClass();
$oldCase4->id = 4;
$oldCase4->status = 'normal';
$oldCase5 = new stdClass();
$oldCase5->id = 5;
$oldCase5->status = 'wait';
// 测试数据1: 评审通过
$postData1 = array(
'result' => 'pass',
'reviewedBy' => array('admin'),
'reviewedDate' => '2024-01-15',
'comment' => '评审通过',
'uid' => ''
);
// 测试数据2: 评审不通过
$postData2 = array(
'result' => 'fail',
'reviewedBy' => array('admin'),
'reviewedDate' => '2024-01-15',
'comment' => '需要修改',
'uid' => ''
);
// 测试数据3: 未选择评审结果
$postData3 = array(
'result' => '',
'reviewedBy' => array('admin'),
'reviewedDate' => '2024-01-15',
'uid' => ''
);
// 测试数据4: 多个评审人员
$postData4 = array(
'result' => 'pass',
'reviewedBy' => array('admin', 'user1', 'user2'),
'reviewedDate' => '2024-01-15',
'comment' => '多人评审通过',
'uid' => ''
);
// 测试数据5: 单个评审人员
$postData5 = array(
'result' => 'pass',
'reviewedBy' => array('admin'),
'reviewedDate' => '2024-01-15',
'comment' => '单人评审通过',
'uid' => ''
);
r($testcaseTest->prepareReviewDataTest(1, $oldCase1, $postData1)) && p('status,result') && e('normal,pass');
r($testcaseTest->prepareReviewDataTest(2, $oldCase2, $postData2)) && p('status,result') && e('normal,fail');
r($testcaseTest->prepareReviewDataTest(3, $oldCase3, $postData3)) && p() && e('0');
r($testcaseTest->prepareReviewDataTest(4, $oldCase4, $postData4)) && p('status,reviewedBy') && e('normal,admin,user1,user2');
r($testcaseTest->prepareReviewDataTest(5, $oldCase5, $postData5)) && p('status,reviewedBy') && e('normal,admin');