From d185b3fb827eb041caec3d61a1f3d1c2ed0e1539 Mon Sep 17 00:00:00 2001 From: liugang Date: Wed, 12 Nov 2025 15:05:15 +0800 Subject: [PATCH] + [misc] Add unit tests for transferZen::printRow() method MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- .../test/lib/transferzen.unittest.class.php | 12 +++- module/transfer/test/zen/printrow.php | 61 +++++++++++++++++++ 2 files changed, 70 insertions(+), 3 deletions(-) create mode 100755 module/transfer/test/zen/printrow.php diff --git a/module/transfer/test/lib/transferzen.unittest.class.php b/module/transfer/test/lib/transferzen.unittest.class.php index 204ea4f77d..9ea1f62f89 100644 --- a/module/transfer/test/lib/transferzen.unittest.class.php +++ b/module/transfer/test/lib/transferzen.unittest.class.php @@ -164,7 +164,7 @@ class transferZenTest // 设置必要的配置和语言 if(!isset($tester->config->transfer)) $tester->config->transfer = new stdClass(); - if(!isset($tester->config->transfer->actionModule)) $tester->config->transfer->actionModule = array(); + $tester->config->transfer->actionModule = array('task', 'story', 'bug'); if(!isset($tester->lang->transfer)) $tester->lang->transfer = new stdClass(); $tester->lang->transfer->new = '新建'; @@ -173,16 +173,22 @@ class transferZenTest try { // 获取transfer对象并设置transferConfig - $transferZen = $tester->loadTarget('transfer', '', 'zen'); + $transferZen = $tester->app->loadTarget('transfer', '', 'zen'); if(!property_exists($transferZen, 'transferConfig')) { $transferZen->transferConfig = new stdClass(); } $transferZen->transferConfig->textareaFields = 'desc,content,steps'; - $result = callZenMethod('transfer', 'printRow', array($module, $row, $fields, $object, $trClass, $addID)); + // 使用反射直接调用private方法,避免responseException + $reflection = new ReflectionClass($transferZen); + $method = $reflection->getMethod('printRow'); + $method->setAccessible(true); + $result = $method->invokeArgs($transferZen, array($module, $row, $fields, $object, $trClass, $addID)); if(dao::isError()) return dao::getError(); return $result; + } catch(EndResponseException $e) { + return $e->getContent(); } catch(Exception $e) { return 'Exception: ' . $e->getMessage() . ' in ' . $e->getFile() . ':' . $e->getLine(); } catch(TypeError $e) { diff --git a/module/transfer/test/zen/printrow.php b/module/transfer/test/zen/printrow.php new file mode 100755 index 0000000000..ff7247246f --- /dev/null +++ b/module/transfer/test/zen/printrow.php @@ -0,0 +1,61 @@ +#!/usr/bin/env php + array('control' => 'input', 'values' => array()), + 'status' => array('control' => 'select', 'values' => array('wait' => '未开始', 'doing' => '进行中')) +); + +// 有ID的对象 +$objectWithId = new stdClass(); +$objectWithId->id = 101; +$objectWithId->name = 'Task Name'; +$objectWithId->status = 'wait'; + +// 无ID的新建对象 +$objectNewTask = new stdClass(); +$objectNewTask->name = 'New Task'; +$objectNewTask->status = 'doing'; + +// 子任务对象(task模块特殊标识) +$objectChildTask = new stdClass(); +$objectChildTask->name = '>Child Task'; +$objectChildTask->status = 'wait'; + +// 5. 🔴 强制要求:必须包含至少5个测试步骤 +$result1 = $transferTest->printRowTest('task', 1, $fields, $objectWithId, '', 1); +$result2 = $transferTest->printRowTest('task', 1, $fields, $objectNewTask, '', 1); +$result3 = $transferTest->printRowTest('task', 1, $fields, $objectChildTask, '', 1); +$result4 = $transferTest->printRowTest('task', 5, $fields, $objectWithId, 'showmore', 1); +$result5 = $transferTest->printRowTest('story', 1, $fields, $objectWithId, '', 1); + +r(strpos($result1, '101') !== false && strpos($result1, "value='101'") !== false) && p() && e('1'); // 步骤1:测试有ID的普通对象生成表格行 +r(strpos($result2, '新建') !== false && strpos($result2, '2') !== false) && p() && e('1'); // 步骤2:测试无ID的新建对象生成表格行 +r(strpos($result3, '子任务') !== false) && p() && e('1'); // 步骤3:测试task模块子任务对象生成表格行 +r(strpos($result4, 'showmore') !== false) && p() && e('1'); // 步骤4:测试带trClass的表格行 +r(strpos($result5, 'icon-close') !== false) && p() && e('1'); // 步骤5:测试actionModule模块生成带删除按钮的表格行 \ No newline at end of file