+ [misc] Add unit tests for metricZen::getCalcFields() method
🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -340,4 +340,22 @@ class metricZenTest
|
||||
return 'Error: ' . $e->getMessage();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test getCalcFields method.
|
||||
*
|
||||
* @param object $calc
|
||||
* @param object $row
|
||||
* @access public
|
||||
* @return mixed
|
||||
*/
|
||||
public function getCalcFieldsZenTest($calc, $row)
|
||||
{
|
||||
$method = $this->metricZenTest->getMethod('getCalcFields');
|
||||
$method->setAccessible(true);
|
||||
|
||||
$result = $method->invokeArgs($this->metricZenTest->newInstance(), array($calc, $row));
|
||||
if(dao::isError()) return dao::getError();
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
Executable
+89
@@ -0,0 +1,89 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 metricZen::getCalcFields();
|
||||
timeout=0
|
||||
cid=0
|
||||
|
||||
- 执行metricTest模块的getCalcFieldsZenTest方法,参数是$calc1, $row1
|
||||
- 属性id @1
|
||||
- 属性name @test
|
||||
- 属性status @active
|
||||
- 执行metricTest模块的getCalcFieldsZenTest方法,参数是$calc2, $row2
|
||||
- 属性total_count @100
|
||||
- 属性total_value @5000
|
||||
- 执行metricTest模块的getCalcFieldsZenTest方法,参数是$calc3, $row3
|
||||
- 属性id @10
|
||||
- 属性name @testuser
|
||||
- 属性title @testtask
|
||||
- 执行metricTest模块的getCalcFieldsZenTest方法,参数是$calc4, $row4
|
||||
- 属性id @20
|
||||
- 属性count @50
|
||||
- 属性name @testproject
|
||||
- 执行metricTest模块的getCalcFieldsZenTest方法,参数是$calc5, $row5
|
||||
- 属性id @30
|
||||
- 属性estimate @8
|
||||
- 属性defaultHours @40
|
||||
|
||||
*/
|
||||
|
||||
// 1. 导入依赖(路径固定,不可修改)
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/metriczen.unittest.class.php';
|
||||
|
||||
// 2. 用户登录(选择合适角色)
|
||||
su('admin');
|
||||
|
||||
// 3. 创建测试实例(变量名与模块名一致)
|
||||
$metricTest = new metricZenTest();
|
||||
|
||||
// 4. 测试步骤执行
|
||||
|
||||
// 步骤1:测试无dataset的calc对象,应直接返回原始row数据
|
||||
$calc1 = new stdclass();
|
||||
$row1 = new stdclass();
|
||||
$row1->id = 1;
|
||||
$row1->name = 'test';
|
||||
$row1->status = 'active';
|
||||
r($metricTest->getCalcFieldsZenTest($calc1, $row1)) && p('id,name,status') && e('1,test,active');
|
||||
|
||||
// 步骤2:测试带AS别名的字段处理
|
||||
$calc2 = new stdclass();
|
||||
$calc2->dataset = 'testDataset';
|
||||
$calc2->fieldList = array('COUNT(*) AS total_count', 'SUM(value) AS total_value');
|
||||
$row2 = new stdclass();
|
||||
$row2->total_count = 100;
|
||||
$row2->total_value = 5000;
|
||||
r($metricTest->getCalcFieldsZenTest($calc2, $row2)) && p('total_count,total_value') && e('100,5000');
|
||||
|
||||
// 步骤3:测试表名.字段名格式的字段处理
|
||||
$calc3 = new stdclass();
|
||||
$calc3->dataset = 'testDataset';
|
||||
$calc3->fieldList = array('user.id', 'user.name', 'task.title');
|
||||
$row3 = new stdclass();
|
||||
$row3->user_id = 10;
|
||||
$row3->user_name = 'testuser';
|
||||
$row3->task_title = 'testtask';
|
||||
r($metricTest->getCalcFieldsZenTest($calc3, $row3)) && p('id,name,title') && e('10,testuser,testtask');
|
||||
|
||||
// 步骤4:测试混合格式字段处理
|
||||
$calc4 = new stdclass();
|
||||
$calc4->dataset = 'testDataset';
|
||||
$calc4->fieldList = array('user.id', 'COUNT(*) AS count', 'project.name');
|
||||
$row4 = new stdclass();
|
||||
$row4->user_id = 20;
|
||||
$row4->count = 50;
|
||||
$row4->project_name = 'testproject';
|
||||
r($metricTest->getCalcFieldsZenTest($calc4, $row4)) && p('id,count,name') && e('20,50,testproject');
|
||||
|
||||
// 步骤5:测试defaultHours特殊字段的保留
|
||||
$calc5 = new stdclass();
|
||||
$calc5->dataset = 'testDataset';
|
||||
$calc5->fieldList = array('task.id', 'task.estimate');
|
||||
$row5 = new stdclass();
|
||||
$row5->task_id = 30;
|
||||
$row5->task_estimate = 8;
|
||||
$row5->defaultHours = 40;
|
||||
r($metricTest->getCalcFieldsZenTest($calc5, $row5)) && p('id,estimate,defaultHours') && e('30,8,40');
|
||||
Reference in New Issue
Block a user