PHPUnit测试时getSortedModules函数返回嵌套数组而非预期值
解决PHP函数getSortedModules返回结构与单元测试预期不符的问题
你的问题核心在于:getSortedModules函数当前返回的是包含关联数组的数组集合,但单元测试期望的是模块名与分数交替排列的扁平一维数组,两者结构完全不匹配,导致测试失败。
问题根源
当前函数逻辑是把每个模块和分数包装成["module"=>xxx, "marks"=>xxx]的关联数组,排序后直接返回这个数组集合,自然每个元素都是数组。但你的测试用例要求的是把模块名和分数依次平铺成一个一维数组。
修正方案
在排序完成后,新增一步遍历处理:将排序好的关联数组中的module和marks值依次提取出来,组装成扁平数组返回。
修改后的函数代码:
function getSortedModules($modules, $marks) { $module_marks = array(); for ($i = 0; $i < count($modules); $i++) { $module_marks_array = array("module"=>$modules[$i], "marks"=>$marks[$i]); array_push($module_marks,$module_marks_array); } usort($module_marks, function($a, $b) { return $b['marks'] <=> $a['marks']; }); // 将关联数组展开为预期的扁平数组 $result = []; foreach ($module_marks as $item) { $result[] = $item['module']; $result[] = $item['marks']; } return $result; }
测试验证
现在运行你的单元测试,函数返回的结构会和预期的["Computer Science",60,"Religion",50, "English",40, "Business",30, "Maths",20]完全一致,测试即可通过。
注意:如果前端原本是适配关联数组结构的,修改函数后要同步确认前端逻辑是否需要调整,避免影响现有功能。
内容的提问来源于stack exchange,提问作者Cbrady
相关产品推荐
相关产品推荐

