mcpField
O
oh-ut-generator

oh-ut-generator

github.com/openharmonyinsight测试与质量35120 次安装11 周前更新
代码仓库

关于 oh-ut-generator

oh-ut-generator 是为 OpenHarmony 代码生成 C++ 单元测试的 skill,遵循 HWTEST_F 约定。它面向需要覆盖函数、依赖和构建配置的开发者,也处理 NDK/NAPI 与 CJSON 测试场景。

主要功能

  1. 01生成正常、异常和边界测试
  2. 02创建 mock 并设置 EXPECT_CALL/ON_CALL
  3. 03匹配 BUILD.gn 依赖与配置
  4. 04处理 NDK、NAPI 和 CJSON 测试模式
  5. 05使测试符合现有项目风格

适用场景

  1. 01为源文件中的所有函数生成测试
  2. 02为指定函数生成测试
  3. 03向现有测试文件追加用例
  4. 04为源代码依赖创建 mock

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/openharmonyinsight/openharmony-skills --skill oh-ut-generator

安装后在 Claude Code 中输入/oh-ut-generator确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

examples/
basic-test-example.cpp
mock-test-example.cpp
ndk-test-example.cpp
references/
assertion-standards.md
build-gn-rules.md
cjson-testing.md
code-style-consistency.md
coverage-requirements.md
framework-specs.md
mock-strategies.md
ndk-napi-testing.md
security-coding.md
smart-pointer-usage.md

详细介绍

OpenHarmony 单元测试生成器

概述

按照 HWTEST_F 框架约定,为 OpenHarmony 代码生成全面的 C++ 单元测试。

主要功能

  • 自动生成测试:为正常、异常和边界场景创建测试用例
  • Mock 对象支持:创建 Mock 类并设置 EXPECT_CALL/ON_CALL
  • BUILD.gn 配置:自动匹配源文件的依赖项
  • 覆盖率优化:最低覆盖率为 75%,目标为 85% 以上
  • 代码风格一致性:与现有测试模式保持一致(阈值 >=70%)
  • NDK/NAPI 支持:特殊处理 NDK 接口(7088+ OH_xxx)和 NAPI 函数(302+ napi_xxx)
  • CJSON 测试:全面支持 CJSON 库测试模式

用法

需要为 OpenHarmony C++ 源文件生成单元测试时,调用此技能。

支持的场景
  1. 单文件测试:为源文件中的所有函数生成测试
  2. 指定函数测试:仅为指定函数生成测试
  3. 扩展测试文件:向现有测试文件追加新的测试用例
  4. 生成 Mock:自动为依赖项创建 Mock 类

关键要求

测试实现完整性
  • 仅接受完整实现:每个测试用例都必须有完整实现
  • 禁止仅含注释的测试:禁止生成仅包含注释或空函数体的测试
  • 使用 Mock:如果创建了 Mock 对象,就必须通过 EXPECT_CALL/ON_CALL 使用它们
  • 分支与断言对应:分支断言必须与分支逻辑完全一致
覆盖率要求
  • 最低要求:分支和行覆盖率均为 75%(强制要求)
  • 目标:分支和行覆盖率均为 85%(目标)
  • 范围:边界条件、异常路径、正常路径和所有条件分支
代码风格一致性

存在现有测试文件时:

  • 智能指针类型:必须与现有代码一致(sptr/wptr 或 std::shared_ptr)
  • Mock 用法:必须与现有 Mock 模式一致
  • 断言风格:必须与现有断言偏好一致(EXPECT_ 或 ASSERT_)
  • 测试结构:必须与现有测试夹具和命名模式一致

一致性阈值:重要场景需达到 >=70%

安全编码
  • 内存管理:与原函数的智能指针用法模式一致
  • 变量初始化:所有变量都必须初始化
  • 边界检查:访问数组/容器前必须进行检查
  • 空指针检查:解引用指针前必须进行检查
  • 返回值检查:必须检查关键函数的返回值

框架规范

HWTEST_F 框架
// Test fixture structure
class YourServiceTest : public testing::Test {
public:
    static void SetUpTestCase(void);
    static void TearDownTestCase(void);
    void SetUp();
    void TearDown();
    std::shared_ptr<YourService> instance_;
};

// Test case format
HWTEST_F(TestClassName, TestCaseName_001, TestSize.Level1)
测试用例命名
  • _001:正常场景
  • _002:异常场景
  • _003:边界场景
  • _004+:其他特殊场景
对象管理
// Standard smart pointers
SetUp(): instance_ = std::make_shared<YourService>();
TearDown(): instance_ = nullptr;

// OpenHarmony sptr/wptr
SetUp(): instance_ = MakeSptr<YourService>(); // or instance_ = new YourService();
TearDown(): instance_ = nullptr;
Mock 用法
auto mock = std::make_shared<MockClass>();
EXPECT_CALL(*mock, Method()).WillOnce(Return(value));
断言
ASSERT_NE(instance_, nullptr);  // Must check
EXPECT_EQ(result, expected);
EXPECT_TRUE(condition);

NDK 接口测试

对于 NDK 接口(OH_xxx),请遵循以下要求:

  1. 资源生命周期:必须配对调用 Create/Destroy
  2. 测试结构:正常路径(001)、异常路径(002)、边界场景(003)
  3. 返回值验证:测试所有错误码
  4. 参数验证:测试空指针、无效值和边界值

CJSON 测试

对于 CJSON 库操作:

  1. 解析测试:正常、空指针、无效 JSON
  2. 获取项测试:正常获取、不存在的项、类型检查
  3. 创建测试:创建对象、数组和值
  4. 内存管理:必须删除所有 cJSON 对象

BUILD.gn 要求

ohos_unittest 目标
ohos_unittest("{CamelCase}Test") {
    module_out_path = "subsystem/module"
    branch_protector_ret = "pac_ret"
    sanitize = {
        integer_overflow = true
        cfi = true
        cfi_cross_dso = true
        debug = false
    }
    sources = ["test_file.cpp"]  # Alphabetically sorted
    include_dirs = ["//include/path"]
    deps = [":source_target"]
    external_deps = [
        "hilog:libhilog",
        "c_utils:utils",
        "googletest:gtest_main"
    ]
    defines = ["private=public"]
}
配置匹配

系统会自动提取源文件的 BUILD.gn 配置:

  • deps:必须包含源目标的所有依赖项
  • external_deps:必须包含所有外部依赖项
  • include_dirs:必须包含所有包含目录
  • defines:必须与源文件定义一致(必要时添加 private=public)

参考文件

详细规范请参阅 references/ 目录:

  • framework-specs.md:HWTEST_F 框架约定和测试模式
  • mock-strategies.md:Mock 对象的创建和使用策略
  • coverage-requirements.md:覆盖率指标和优化策略
  • build-gn-rules.md:BUILD.gn 配置和依赖匹配
  • assertion-standards.md:断言方法和分支对应关系
  • code-style-consistency.md:与现有测试保持一致的要求
  • smart-pointer-usage.md:sptr/wptr 与标准智能指针的用法
  • ndk-napi-testing.md:NDK/NAPI 接口测试规范
  • cjson-testing.md:CJSON 库测试模式
  • security-coding.md:内存管理和安全编码要求

示例

请参阅 examples/ 目录,了解以下内容:

  • basic-test-example.cpp:基本测试结构和模式
  • mock-test-example.cpp:Mock 对象的用法示例
  • ndk-test-example.cpp:NDK 接口测试示例

评论

支持 Markdown