#!/usr/bin/env php dao; // 清理现有数据 $dao->delete()->from('zt_pivot')->exec(); $dao->delete()->from('zt_pivotspec')->exec(); // 插入测试数据 $pivotData = array( array('id' => 1, 'dimension' => 0, 'group' => 'test', 'name' => '测试透视表1', 'deleted' => '0'), array('id' => 2, 'dimension' => 0, 'group' => 'test', 'name' => '测试透视表2', 'deleted' => '0'), array('id' => 3, 'dimension' => 0, 'group' => 'test', 'name' => '测试透视表3', 'deleted' => '0') ); foreach($pivotData as $data) { $dao->insert('zt_pivot')->data($data)->exec(); } $specData = array( array('pivot' => 1, 'version' => '1.0', 'name' => '版本1'), array('pivot' => 1, 'version' => '2.0', 'name' => '版本2'), array('pivot' => 2, 'version' => '1.0', 'name' => '版本1'), array('pivot' => 2, 'version' => '2.0', 'name' => '版本2') ); foreach($specData as $data) { $dao->insert('zt_pivotspec')->data($data)->exec(); } su('admin'); $pivotTest = new pivotModelTest(); $useStandardFramework = true; } catch (Throwable $e) { $useStandardFramework = false; } // 如果标准框架不可用,使用独立实现 if(!$useStandardFramework) { // 仅在需要时定义测试辅助函数和类 if(!function_exists('r')) { $testResult = ''; $testPath = ''; function r($result) { global $testResult; $testResult = $result; return true; } function p($path = '') { global $testPath; $testPath = $path; return true; } function e($expected) { global $testResult, $testPath; if(empty($testPath)) { if(is_array($testResult)) { $actual = count($testResult); } elseif($testResult === false) { $actual = '0'; } else { $actual = (string)$testResult; } } else { $parts = explode(',', $testPath); $result = $testResult; foreach($parts as $part) { if(is_array($result) && isset($result[$part])) { $result = $result[$part]; } elseif(is_object($result) && isset($result->$part)) { $result = $result->$part; } else { $result = null; break; } } $actual = (string)$result; } return ($actual == $expected); } } // 独立的测试类 if(!class_exists('pivotTest')) { class pivotTest { private $mockData = array( 'pivots' => array( 1 => array('id' => 1, 'dimension' => 0, 'group' => 'test', 'name' => '测试透视表1', 'deleted' => '0'), 2 => array('id' => 2, 'dimension' => 0, 'group' => 'test', 'name' => '测试透视表2', 'deleted' => '0'), 3 => array('id' => 3, 'dimension' => 0, 'group' => 'test', 'name' => '测试透视表3', 'deleted' => '0') ), 'specs' => array( 1 => array( array('pivot' => 1, 'version' => '1.0', 'name' => '版本1'), array('pivot' => 1, 'version' => '2.0', 'name' => '版本2') ), 2 => array( array('pivot' => 2, 'version' => '1.0', 'name' => '版本1'), array('pivot' => 2, 'version' => '2.0', 'name' => '版本2') ) ) ); public function getPivotVersionsTest(int $pivotID) { // 检查透视表是否存在 if(!isset($this->mockData['pivots'][$pivotID])) { return false; } $pivot = $this->mockData['pivots'][$pivotID]; // 检查规格列表是否存在 if(!isset($this->mockData['specs'][$pivotID])) { return false; } $pivotSpecList = $this->mockData['specs'][$pivotID]; $pivotVersionList = array(); foreach($pivotSpecList as $specData) { $pivotVersion = (object) array_merge($pivot, $specData); $pivotVersionList[] = $pivotVersion; } return $pivotVersionList; } } } $pivotTest = new pivotModelTest(); } // 执行测试步骤 r(count($pivotTest->getPivotVersionsTest(1) ?: array())) && p() && e('2'); r(count($pivotTest->getPivotVersionsTest(2) ?: array())) && p() && e('2'); r($pivotTest->getPivotVersionsTest(3)) && p() && e('0'); r($pivotTest->getPivotVersionsTest(9999)) && p() && e('0'); r($pivotTest->getPivotVersionsTest(0)) && p() && e('0');