From 46c8107d4bf71f3b633f3f5a6dc1883c518d05d4 Mon Sep 17 00:00:00 2001 From: liugang Date: Wed, 12 Nov 2025 10:32:50 +0800 Subject: [PATCH] + [misc] Add unit tests for testcaseZen::buildCasesForBathcCreate() 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/testcasezen.unittest.class.php | 47 ++++++++++++ .../test/zen/buildcasesforbathccreate.php | 72 +++++++++++++++++++ 2 files changed, 119 insertions(+) create mode 100755 module/testcase/test/zen/buildcasesforbathccreate.php diff --git a/module/testcase/test/lib/testcasezen.unittest.class.php b/module/testcase/test/lib/testcasezen.unittest.class.php index 1e57f4496d..074a721e22 100755 --- a/module/testcase/test/lib/testcasezen.unittest.class.php +++ b/module/testcase/test/lib/testcasezen.unittest.class.php @@ -758,6 +758,53 @@ class testcaseZenTest } } + /** + * Test buildCasesForBathcCreate method. + * + * @param int $productID 产品ID + * @param string $tab 当前标签页 + * @access public + * @return array + */ + public function buildCasesForBathcCreateTest(int $productID = 1, string $tab = 'qa') + { + global $tester; + + try { + // 初始化必要的配置 + if(!isset($tester->config->testcase)) $tester->config->testcase = new stdClass(); + if(!isset($tester->config->testcase->form)) $tester->config->testcase->form = new stdClass(); + if(!isset($tester->config->testcase->form->batchCreate)) $tester->config->testcase->form->batchCreate = array(); + + // 设置app的tab属性 + $originalTab = $tester->app->tab ?? ''; + $tester->app->tab = $tab; + + // 如果是项目模式,设置session数据 + if($tab == 'project') { + if(!isset($tester->session)) $tester->session = new stdClass(); + $tester->session->project = 1; + } + + // 调用zen方法 + $result = callZenMethod('testcase', 'buildCasesForBathcCreate', [$productID]); + + // 恢复原始tab状态 + $tester->app->tab = $originalTab; + + if(dao::isError()) return dao::getError(); + return $result; + } catch (Exception $e) { + // 恢复原始tab状态 + if(isset($originalTab)) $tester->app->tab = $originalTab; + return $e->getMessage(); + } catch (Error $e) { + // 恢复原始tab状态 + if(isset($originalTab)) $tester->app->tab = $originalTab; + return $e->getMessage(); + } + } + /** * Test buildCasesForShowImport method. * diff --git a/module/testcase/test/zen/buildcasesforbathccreate.php b/module/testcase/test/zen/buildcasesforbathccreate.php new file mode 100755 index 0000000000..e6282cc8a8 --- /dev/null +++ b/module/testcase/test/zen/buildcasesforbathccreate.php @@ -0,0 +1,72 @@ +#!/usr/bin/env php +id->range('1-5'); +$product->name->range('产品1,产品2,产品3,产品4,产品5'); +$product->gen(5); + +$story = zenData('story'); +$story->id->range('1-10'); +$story->product->range('1'); +$story->version->range('1-3'); +$story->gen(10); + +$project = zenData('project'); +$project->id->range('1-5'); +$project->name->range('项目1,项目2,项目3,项目4,项目5'); +$project->type->range('project'); +$project->multiple->range('0,1'); +$project->parent->range('0'); +$project->gen(5); + +// 3. 用户登录(选择合适角色) +su('admin'); + +// 4. 创建测试实例(变量名与模块名一致) +$testcaseTest = new testcasezenTest(); + +// 准备正常的批量创建数据 +$_POST = array( + 'title' => array('测试用例1', '测试用例2'), + 'type' => array('feature', 'feature'), + 'pri' => array(3, 3), + 'stage' => array('unittest', 'unittest'), + 'status' => array('normal', 'normal'), + 'precondition' => array('前置条件1', '前置条件2'), + 'keywords' => array('关键词1', '关键词2'), + 'steps' => array('步骤1', '步骤2'), + 'expects' => array('期望1', '期望2'), + 'story' => array(1, 2), + 'review' => array(0, 0) +); + +// 5. 🔴 强制要求:必须包含至少5个测试步骤 +r(count($testcaseTest->buildCasesForBathcCreateTest(1, 'qa'))) && p() && e('2'); // 步骤1:正常批量创建用例,返回数组长度 +r($result = $testcaseTest->buildCasesForBathcCreateTest(1, 'qa')) && p('0:product') && e('1'); // 步骤2:检查第一个用例的产品ID +r($result) && p('0:status') && e('normal'); // 步骤3:检查第一个用例的状态 +r($result) && p('0:version') && e('1'); // 步骤4:检查第一个用例的版本号 +r(count($testcaseTest->buildCasesForBathcCreateTest(1, 'project'))) && p() && e('2'); // 步骤5:项目模式下批量创建用例,返回数组长度 +r($result = $testcaseTest->buildCasesForBathcCreateTest(1, 'project')) && p('0:project') && e('1'); // 步骤6:项目模式下检查第一个用例的项目ID +r($result) && p('0:openedBy') && e('admin'); // 步骤7:检查第一个用例的创建者 \ No newline at end of file