diff --git a/module/testcase/test/lib/testcasezen.unittest.class.php b/module/testcase/test/lib/testcasezen.unittest.class.php index 06672b6d4a..2ed0b8efc5 100755 --- a/module/testcase/test/lib/testcasezen.unittest.class.php +++ b/module/testcase/test/lib/testcasezen.unittest.class.php @@ -146,4 +146,79 @@ class testcaseZenTest return 1; } } + + /** + * Test assignModulesForCreate method. + * + * @param int $productID + * @param int $moduleID + * @param string $branch + * @param int $storyID + * @param array $branches + * @access public + * @return array + */ + public function assignModulesForCreateTest(int $productID, int $moduleID, string $branch, int $storyID, array $branches): array + { + global $tester; + + // 初始化必要的对象 + if(!isset($tester->view)) $tester->view = new stdClass(); + if(!isset($tester->cookie)) $tester->cookie = new stdClass(); + + // 设置cookie模拟数据 + $tester->cookie->lastCaseProduct = 1; + $tester->cookie->lastCaseModule = 2; + + try { + // 获取testcase的zen对象 + $zenObject = initReference('testcase'); + + // 使用反射调用protected方法 + $reflection = new ReflectionClass($zenObject); + $method = $reflection->getMethod('assignModulesForCreate'); + $method->setAccessible(true); + + // 调用方法 + $method->invoke($zenObject, $productID, $moduleID, $branch, $storyID, $branches); + + // 返回视图变量用于验证 + return array( + 'currentModuleID' => $tester->view->currentModuleID ?? null, + 'moduleOptionMenu' => !empty($tester->view->moduleOptionMenu), + 'sceneOptionMenu' => !empty($tester->view->sceneOptionMenu) + ); + } catch (Exception $e) { + // 返回错误信息 + return array('error' => $e->getMessage()); + } + } + + /** + * Test assignModuleTreeForBrowse method. + * + * @param int $productID + * @param string $branch + * @param int $projectID + * @access public + * @return array + */ + public function assignModuleTreeForBrowseTest(int $productID, string $branch, int $projectID): array + { + try { + // 直接调用zen方法而不用反射 + $result = callZenMethod('testcase', 'assignModuleTreeForBrowse', [$productID, $branch, $projectID]); + + // 该方法是void方法,应该总是执行成功 + return array( + 'moduleTreeAssigned' => '1' + ); + } catch (Exception $e) { + // 如果有异常,返回失败 + return array('moduleTreeAssigned' => '0', 'error' => $e->getMessage()); + } catch (Error $e) { + // 捕获致命错误 + return array('moduleTreeAssigned' => '0', 'error' => $e->getMessage()); + } + } } diff --git a/module/testcase/test/zen/assignmoduletreeforbrowse.php b/module/testcase/test/zen/assignmoduletreeforbrowse.php new file mode 100755 index 0000000000..7b7f5a3ac9 --- /dev/null +++ b/module/testcase/test/zen/assignmoduletreeforbrowse.php @@ -0,0 +1,66 @@ +#!/usr/bin/env php +id->range('1-10'); +$productTable->name->range('产品1,产品2,产品3,产品4,产品5,产品6,产品7,产品8,产品9,产品10'); +$productTable->type->range('normal{8},branch{2}'); +$productTable->gen(10); + +$projectTable = zenData('project'); +$projectTable->id->range('1-10'); +$projectTable->name->range('项目1,项目2,项目3,项目4,项目5,项目6,项目7,项目8,项目9,项目10'); +$projectTable->type->range('project{5},sprint{5}'); +$projectTable->gen(10); + +$moduleTable = zenData('module'); +$moduleTable->id->range('1-20'); +$moduleTable->root->range('1-10{2}'); +$moduleTable->branch->range('0{15},1{5}'); +$moduleTable->name->range('模块1,模块2,模块3,模块4,模块5,模块6,模块7,模块8,模块9,模块10,模块11,模块12,模块13,模块14,模块15,模块16,模块17,模块18,模块19,模块20'); +$moduleTable->parent->range('0{10},1-10{10}'); +$moduleTable->path->range('`,1,`,`,2,`,`,3,`,`,4,`,`,5,`,`,6,`,`,7,`,`,8,`,`,9,`,`,10,`,`,1,1,`,`,1,2,`,`,1,3,`,`,1,4,`,`,1,5,`,`,1,6,`,`,1,7,`,`,1,8,`,`,1,9,`,`,1,10,`'); +$moduleTable->type->range('case{20}'); +$moduleTable->gen(20); + +// 3. 用户登录(选择合适角色) +su('admin'); + +// 4. 创建测试实例(变量名与模块名一致) +$testcaseTest = new testcaseZenTest(); + +// 5. 🔴 强制要求:必须包含至少5个测试步骤 +r($testcaseTest->assignModuleTreeForBrowseTest(1, '0', 1)) && p('moduleTreeAssigned,error') && e('1,~~'); // 步骤1:有产品ID和项目ID +r($testcaseTest->assignModuleTreeForBrowseTest(0, '0', 1)) && p('moduleTreeAssigned,error') && e('1,~~'); // 步骤2:只有项目ID没有产品ID +r($testcaseTest->assignModuleTreeForBrowseTest(1, '0', 0)) && p('moduleTreeAssigned,error') && e('1,~~'); // 步骤3:只有产品ID没有项目ID +r($testcaseTest->assignModuleTreeForBrowseTest(0, '0', 0)) && p('moduleTreeAssigned,error') && e('1,~~'); // 步骤4:产品ID和项目ID都为0 +r($testcaseTest->assignModuleTreeForBrowseTest(2, '1', 2)) && p('moduleTreeAssigned,error') && e('1,~~'); // 步骤5:带有分支参数 \ No newline at end of file