+ [misc] Add unit tests for metricTao::executeDelete() method

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
liugang
2025-09-15 15:09:43 +08:00
co-authored by Claude
parent efaff871e1
commit db1e505232
3 changed files with 133 additions and 0 deletions
@@ -1484,4 +1484,40 @@ class metricTest
return $afterUndeleted - $beforeUndeleted;
}
/**
* Test executeDelete method.
*
* @param string $code
* @access public
* @return mixed
*/
public function executeDeleteTest($code = '')
{
global $tester;
if(empty($code)) return 'invalid_code';
// 记录删除前的记录数
$beforeCount = $tester->dao->select('COUNT(*) as count')
->from(TABLE_METRICLIB)
->where('metricCode')->eq($code)
->fetch('count');
// 使用反射来调用protected方法
$reflection = new ReflectionClass($this->objectTao);
$method = $reflection->getMethod('executeDelete');
$method->setAccessible(true);
$method->invoke($this->objectTao, $code);
if(dao::isError()) return dao::getError();
// 记录删除后的记录数
$afterCount = $tester->dao->select('COUNT(*) as count')
->from(TABLE_METRICLIB)
->where('metricCode')->eq($code)
->fetch('count');
return $beforeCount - $afterCount;
}
}
+75
View File
@@ -0,0 +1,75 @@
#!/usr/bin/env php
<?php
/**
title=测试 metricTao::executeDelete();
timeout=0
cid=0
- 步骤1:删除test_code_1的记录(5个deleted=1) @5
- 步骤2:删除test_code_2的记录(2个value=0) @2
- 步骤3:删除test_code_3的记录(5个deleted=1) @5
- 步骤4:删除test_code_4的记录(无符合条件记录) @0
- 步骤5:测试空的度量编码参数 @invalid_code
*/
// 1. 导入依赖(路径固定,不可修改)
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/lib/metric.unittest.class.php';
// 2. zendata数据准备(根据需要配置)
global $tester;
$tester->dao->delete()->from(TABLE_METRICLIB)->exec();
// 手动插入测试数据
$records = array(
array('metricCode' => 'test_code_1', 'value' => '0', 'deleted' => '1'),
array('metricCode' => 'test_code_1', 'value' => '0', 'deleted' => '1'),
array('metricCode' => 'test_code_1', 'value' => '0', 'deleted' => '1'),
array('metricCode' => 'test_code_1', 'value' => '100', 'deleted' => '1'),
array('metricCode' => 'test_code_1', 'value' => '100', 'deleted' => '1'),
array('metricCode' => 'test_code_2', 'value' => '0', 'deleted' => '0'),
array('metricCode' => 'test_code_2', 'value' => '0', 'deleted' => '0'),
array('metricCode' => 'test_code_2', 'value' => '200', 'deleted' => '0'),
array('metricCode' => 'test_code_2', 'value' => '200', 'deleted' => '0'),
array('metricCode' => 'test_code_2', 'value' => '200', 'deleted' => '0'),
array('metricCode' => 'test_code_3', 'value' => '0', 'deleted' => '1'),
array('metricCode' => 'test_code_3', 'value' => '0', 'deleted' => '1'),
array('metricCode' => 'test_code_3', 'value' => '0', 'deleted' => '1'),
array('metricCode' => 'test_code_3', 'value' => '0', 'deleted' => '1'),
array('metricCode' => 'test_code_3', 'value' => '0', 'deleted' => '1'),
array('metricCode' => 'test_code_4', 'value' => '300', 'deleted' => '0'),
array('metricCode' => 'test_code_4', 'value' => '300', 'deleted' => '0'),
array('metricCode' => 'test_code_4', 'value' => '300', 'deleted' => '0'),
array('metricCode' => 'test_code_4', 'value' => '300', 'deleted' => '0'),
array('metricCode' => 'test_code_4', 'value' => '300', 'deleted' => '0'),
array('metricCode' => 'test_code_5', 'value' => '0', 'deleted' => '0'),
array('metricCode' => 'test_code_5', 'value' => '0', 'deleted' => '0'),
array('metricCode' => 'test_code_5', 'value' => '0', 'deleted' => '0'),
array('metricCode' => 'test_code_5', 'value' => '0', 'deleted' => '0'),
array('metricCode' => 'test_code_5', 'value' => '0', 'deleted' => '0')
);
foreach($records as $index => $record) {
$record['id'] = $index + 1;
$record['year'] = '2024';
$record['month'] = '01';
$record['day'] = sprintf('%02d', $index + 1);
$record['date'] = '2024-01-' . sprintf('%02d', $index + 1) . ' 00:00:00';
$tester->dao->insert(TABLE_METRICLIB)->data($record)->exec();
}
// 3. 用户登录(选择合适角色)
su('admin');
// 4. 创建测试实例(变量名与模块名一致)
$metricTest = new metricTest();
// 5. 强制要求:必须包含至少5个测试步骤
r($metricTest->executeDeleteTest('test_code_1')) && p() && e('5'); // 步骤1:删除test_code_1的记录(5个deleted=1)
r($metricTest->executeDeleteTest('test_code_2')) && p() && e('2'); // 步骤2:删除test_code_2的记录(2个value=0)
r($metricTest->executeDeleteTest('test_code_3')) && p() && e('5'); // 步骤3:删除test_code_3的记录(5个deleted=1)
r($metricTest->executeDeleteTest('test_code_4')) && p() && e('0'); // 步骤4:删除test_code_4的记录(无符合条件记录)
r($metricTest->executeDeleteTest('')) && p() && e('invalid_code'); // 步骤5:测试空的度量编码参数
@@ -0,0 +1,22 @@
---
title: Execute Delete test data
desc: Test data for metricTao::executeDelete method
fields:
- field: id
range: 1-25
- field: metricCode
range: test_code_1{5},test_code_2{5},test_code_3{5},test_code_4{5},test_code_5{5}
- field: value
range: 0{3},100{2},0{2},200{3},0{5},300{5},0{5}
- field: deleted
range: 1{3},1{2},0{2},0{3},1{5},0{5},0{5}
- field: year
range: 2024{25}
- field: month
range: 01{25}
- field: day
range: 01-25:1
- field: date
range: 2024-01-01{25}
format: "YYYY-MM-DD hh:mm:ss"