C/C++单元测试生成器

一个自动化生成和验证C/C++代码Google Test (GTest)套件的高性能工具,基于libclang进行AST分析并提供技术基线。

  • by ajithksr
  • Python
  • 本地部署
  • 3 星标
  • 更新于
在 GitHub 查看 ajithksr/UnitTest_Generator_MCP

使用说明

代理C/C++单元测试生成器(MCP服务器)

该项目是一个高性能 模型上下文协议(MCP)服务器 它自动化了C/C++代码的Google测试(GTest)套件的生成和验证。它利用 libclang 用于AST分析,并提供技术基线(边界、EP、MCDC),以帮助LLM主机生成高质量的测试用例。


🏗️ 建筑与设计

该公用事业公司充当 桥 在C++构建/分析生态系统和大型语言模型(LLM)之间。它将技术分析(AST、构建、覆盖)与智能测试设计分开,使LLM能够专注于创建高价值的测试场景。

系统概述

graph TD
    subgraph "MCP Host"
        A["User / Agent Prompt"] --> B["Host LLM"]
    end
    
    subgraph "MCP Server (FastMCP)"
        C["mcp_server.py"]
        D["CodeAnalyzer"]
        E["StrategyGenerator"]
        F["TestGenerator"]
    end

    subgraph "Local Tooling"
        G["libclang (AST)"]
        H["CMake / Make (Build)"]
        I["GTest / LCOV (Verify)"]
    end

    B <--> C
    C --> D
    C --> E
    C --> F
    D --> G
    F --> H
    C --> I

序列流:循环中的人工作流程

sequenceDiagram
    autonumber
    participant U as User
    participant H as MCP Host (LLM)
    participant S as MCP Server
    participant T as OS / Tooling

    U->>H: Request Test Generation
    H->>U: Mode Choice (Step-by-Step vs E2E?)
    U-->>H: Step-by-Step

    H->>S: analyze_source_code()
    S-->>H: AST Results (Functions, Types)
    
    H->>S: get_test_strategy_context()
    S-->>H: Technical Baseline (MCDC, Boundaries)
    
    Note over H,U: MANDATORY REVIEW: Strategy
    H->>U: Display Strategy (.md)
    U-->>H: Approve Strategy

    H->>H: Generate Test Implementation Logic

    H->>S: generate_gtest_file(bodies)
    S-->>H: Success (GeneratedUT/test.cpp)
    
    Note over H,U: MANDATORY REVIEW: Code
    H->>U: Display Generated Code
    U-->>H: Approve Code

    H->>S: run_and_verify_tests()
    S->>T: cmake, make, run, lcov
    T-->>S: Execution & Coverage Data
    S-->>H: Final Summary
    H->>U: Final Report (HTML Coverage link)

🛠️ MCP工具

  1. analyze_source_code:返回深层AST详细信息(签名、类成员、自定义类型)。
  2. analyze_existing_tests:返回现有的GTest套件,以确定覆盖范围差距。
  3. get_test_strategy_context:提供 技术基线 (MCDC条件、边界值)供LLM在生成过程中使用。
  4. generate_gtest_file:将主机提供的测试体合并到一个强大的GTest模板中。
  5. run_and_verify_tests:协调构建和验证管道(CMake、Make、GTest、LCOV)。

🚀 使用指南

1.独立CLI模式(main.py)

该工具可以直接从命令行用于自动化或本地测试。

  • 分析并制定战略:

    python3 main.py analyze path/to/source.cpp
    

    创建 TestStrategy/source_strategy.yaml 和 .md.

  • 生成测试代码:

    python3 main.py generate TestStrategy/source_strategy.yaml
    

    创建 GeneratedUT/source_test.cpp.

  • 构建并运行覆盖:

    python3 main.py build path/to/source.cpp --coverage --run
    

    执行内置 GeneratedUT/build 并生成HTML覆盖率 GeneratedUT/coverage_html/.

  • 清洁工作区:

    python3 main.py clean
    

    安全移除 GeneratedUT/ 和 TestStrategy/ 目录。

2.MCP模式(技能工作流程)

使用启用MCP的代理时,请使用 cpp_test_generator 技能。支持对象包括:

  • 基洛代码:用途 .kilocode/skills/
  • Roo 代码:用途 .roo/skills/ 和 .roomodes
  • GitHub Copilot:用途 .github/copilot-instructions.md

工作流序列:

  1. 初始化:代理要求“逐步”或“端到端”模式。使用“逐步”进行手动审查。
  2. 技术基线:代理提供战略背景。 请仔细阅读此内容 在 TestStrategy 文件夹。
  3. 批准:授予继续代码生成的权限。
  4. 代码审查:代理显示生成的代码。 检查此内容是否正确 在 GeneratedUT 文件夹。
  5. 最终验证:授予构建和验证的权限。

📂 项目结构

  • src/:核心逻辑(分析器、策略、生成器)。
  • templates/:Jinja2模板 CMakeLists.txt 以及GTest文件。
  • TestStrategy/:分析结果的输出目录(YAML/MD)。
  • GeneratedUT/:生成的测试和构建工件的输出目录。
  • main.py:独立CLI入口点。
  • mcp_server.py:MCP服务器入口点。

🔩 安装

需求

  • Linux(针对Ubuntu/Debian进行了优化)
  • libclang, cmake, g++, lcov, python3
  • pip install mcp jinja2 pyyaml rich typer

MCP客户端配置

将此添加到您的 mcp_settings.json 或 mcp.json:

{
  "command": "python3",
  "args": ["/absolute/path/to/UnitTest_Generator_MCP/mcp_server.py"],
  "env": { "PYTHONPATH": "/absolute/path/to/UnitTest_Generator_MCP" }
}