From e28ec9cf87229dbe5da01be31270cd8645e268d3 Mon Sep 17 00:00:00 2001 From: liugang Date: Wed, 10 Sep 2025 11:04:41 +0800 Subject: [PATCH] + [misc] Add unit tests for testtaskModel::linkImportedCaseToSuite() 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/testtask.unittest.class.php | 29 +++++++ .../test/model/linkimportedcasetosuite.php | 86 +++++++++++++++++++ 2 files changed, 115 insertions(+) create mode 100755 module/testtask/test/model/linkimportedcasetosuite.php diff --git a/module/testtask/test/lib/testtask.unittest.class.php b/module/testtask/test/lib/testtask.unittest.class.php index dc19dced8b..68d6365338 100644 --- a/module/testtask/test/lib/testtask.unittest.class.php +++ b/module/testtask/test/lib/testtask.unittest.class.php @@ -884,4 +884,33 @@ class testtaskTest return 'error: ' . $e->getMessage(); } } + + /** + * Test linkImportedCaseToSuite method. + * + * @param object $case + * @param int $caseID + * @param object $suiteCase + * @access public + * @return mixed + */ + public function linkImportedCaseToSuiteTest(object $case, int $caseID, object $suiteCase) + { + $reflection = new ReflectionClass($this->objectModel); + $method = $reflection->getMethod('linkImportedCaseToSuite'); + $method->setAccessible(true); + + try { + $result = $method->invokeArgs($this->objectModel, [$case, $caseID, $suiteCase]); + if(dao::isError()) { + $errors = dao::getError(); + return 'dao_error: ' . (is_array($errors) ? implode(', ', $errors) : $errors); + } + return $result; + } catch(Exception $e) { + return 'exception: ' . $e->getMessage(); + } catch(Error $e) { + return 'error: ' . $e->getMessage(); + } + } } diff --git a/module/testtask/test/model/linkimportedcasetosuite.php b/module/testtask/test/model/linkimportedcasetosuite.php new file mode 100755 index 0000000000..2bf856025a --- /dev/null +++ b/module/testtask/test/model/linkimportedcasetosuite.php @@ -0,0 +1,86 @@ +#!/usr/bin/env php +id->range('1-10'); +$case->title->range('测试用例{1-10}'); +$case->product->range('1-3'); +$case->version->range('1-2'); +$case->gen(10); + +$suite = zenData('testsuite'); +$suite->id->range('1-5'); +$suite->name->range('测试套件{1-5}'); +$suite->product->range('1-3'); +$suite->gen(5); + +$suitecase = zenData('suitecase'); +$suitecase->suite->range('1-5'); +$suitecase->case->range('1-10'); +$suitecase->product->range('1-3'); +$suitecase->version->range('1-2'); +$suitecase->gen(0); // 先清空现有数据 + +// 3. 用户登录 +su('admin'); + +// 4. 创建测试实例 +$testtaskTest = new testtaskTest(); + +// 5. 测试步骤:必须包含至少5个测试步骤 +// 构造测试数据对象 +$testCase = new stdClass(); +$testCase->id = 1; +$testCase->title = '测试用例1'; +$testCase->product = 1; +$testCase->version = 1; + +$testSuiteCase = new stdClass(); +$testSuiteCase->suite = 1; +$testSuiteCase->case = 0; // 将由方法设置 +$testSuiteCase->product = 0; // 将由方法设置 +$testSuiteCase->version = 0; // 将由方法设置 + +r($testtaskTest->linkImportedCaseToSuiteTest($testCase, 1, $testSuiteCase)) && p() && e('1'); // 步骤1:正常关联 + +// 步骤2:空测试用例对象关联(但包含必需属性) +$emptyCase = new stdClass(); +$emptyCase->version = 1; +$emptyCase->product = 1; +r($testtaskTest->linkImportedCaseToSuiteTest($emptyCase, 2, $testSuiteCase)) && p() && e('1'); // 步骤2:空对象但有必需属性 + +// 步骤3:无效测试用例ID关联 +$testCase->id = 999; // 不存在的ID +r($testtaskTest->linkImportedCaseToSuiteTest($testCase, 999, $testSuiteCase)) && p() && e('1'); // 步骤3:无效ID仍可执行replace操作 + +// 步骤4:空测试套件用例对象关联(但包含必需属性) +$emptySuiteCase = new stdClass(); +$emptySuiteCase->suite = 2; +$emptySuiteCase->case = 0; +$emptySuiteCase->product = 0; +$emptySuiteCase->version = 0; +r($testtaskTest->linkImportedCaseToSuiteTest($testCase, 3, $emptySuiteCase)) && p() && e('1'); // 步骤4:空套件对象但有必需属性 + +// 步骤5:重复关联相同测试用例到同一套件 +$testCase->id = 1; +$testSuiteCase->suite = 1; +r($testtaskTest->linkImportedCaseToSuiteTest($testCase, 1, $testSuiteCase)) && p() && e('1'); // 步骤5:重复关联,replace操作正常 \ No newline at end of file