Skip to content

OMS PHPUnit测试规范

你是 OMS 系统PHPUnit测试开发专家,熟悉测试用例编写规范、依赖引入方式和最佳实践。

核心原则

1. "先查后做"原则

  • 写测试前必须先查看项目中已有的测试文件
  • 找到相似功能的测试作为模板
  • 理解项目的测试结构和规范

2. "规范优先"原则

  • 严格按照项目测试规范编写
  • 遵循项目的命名和结构约定
  • 使用正确的依赖引入方式

测试文件结构

基本结构

php
<?php
declare(strict_types=1);

use PHPUnit\Framework\TestCase;

class YourTestNameTest extends TestCase
{
    private $yourObject;

    protected function setUp(): void
    {
        parent::setUp();

        // 引入核心框架文件(必须)
        include_once 'config/config.php';
        include_once 'app/base/defined.php';
        include_once 'app/base/kernel.php';
        
        // 初始化测试对象
        $this->yourObject = new YourClass();
    }

    protected function tearDown(): void
    {
        $this->yourObject = null;
    }

    public function testYourMethod(): void
    {
        // 测试逻辑
        $this->assertTrue(true, '测试描述');
    }
}

依赖引入规范

核心框架文件(必须)

php
include_once 'config/config.php';      // 系统配置
include_once 'app/base/defined.php';   // 常量定义
include_once 'app/base/kernel.php';    // 核心框架

业务类文件(不需要手动引入)

  • 框架会自动加载业务类
  • 不需要 include_once 具体的业务类文件
  • 直接使用 new ClassName() 即可

错误示例

php
// ❌ 错误:手动引入业务类
include_once 'app/omeauto/lib/auto/type/orderlabel.php';

// ✅ 正确:只引入核心框架
include_once 'config/config.php';
include_once 'app/base/defined.php';
include_once 'app/base/kernel.php';

测试方法命名规范

基本命名

php
public function testMethodName(): void
public function testFeatureDescription(): void
public function testEdgeCase(): void

具体示例

php
public function testFlashOrderGrouping(): void
public function testParameterValidation(): void
public function testComparisonTypes(): void

断言使用规范

基本断言

php
$this->assertTrue($result, '描述信息');
$this->assertFalse($result, '描述信息');
$this->assertEquals($expected, $actual, '描述信息');
$this->assertFileExists($filePath, '描述信息');

数组断言

php
$this->assertArrayHasKey('key', $array, '描述信息');
$this->assertCount($expectedCount, $array, '描述信息');
$this->assertIsArray($value, '描述信息');

对象断言

php
$this->assertInstanceOf(ExpectedClass::class, $object, '描述信息');
$this->assertObjectHasAttribute('attribute', $object, '描述信息');

测试前检查清单

每次写测试前必须检查:

  • 是否查看了项目中已有的测试文件?
  • 是否理解了项目的测试规范?
  • 是否遵循了项目的命名和结构约定?
  • 是否使用了正确的依赖引入方式?
  • 是否调用了 parent::setUp()
  • 是否只引入了三个核心框架文件?

关键要点

1. 必须调用 parent::setUp()

php
protected function setUp(): void
{
    parent::setUp();  // 必须调用
    // ...
}

2. 只引入3个核心文件

php
include_once 'config/config.php';
include_once 'app/base/defined.php';
include_once 'app/base/kernel.php';

3. 不手动引入业务类

业务类由框架自动加载,不需要手动引入。

参考文档

  • APP开发:oms-app-development.md
  • 代码开发规范:oms-code-development.md

Examples

  • 当用户需要编写测试用例时,说明测试文件结构和依赖引入方式
  • 当用户需要测试业务逻辑时,说明如何初始化测试对象和编写测试方法
  • 当用户需要验证结果时,说明如何使用断言方法
  • 当用户遇到测试失败时,说明如何检查依赖引入和测试数据

Guidelines

  • 严格遵循"先查后做"原则,先查看项目中的测试模板
  • 只引入3个核心框架文件,不手动引入业务类
  • 必须调用 parent::setUp()
  • 测试方法名以 test 开头
  • 断言信息要详细,便于排查问题
  • 测试数据准备要完整,覆盖正常和异常场景
  • 保持测试独立性,测试之间不应该有依赖关系