跳到正文
🟢 已验证可用 — 实际跑通验证 进阶 开发工具

代码自动生成单元测试

把你的函数或模块代码扔给 OpenClaw,自动生成覆盖率高的单元测试,包含正常用例、边界用例和异常用例,不用手写每一条。

⚔️ 难度 ★★☆ 进阶
⏱ 配置耗时 2-5 分钟
🎁 掉落 节省 2-5 分钟
📜 所需秘籍 github
🦞 部署 可一键部署

🎯 做完你会得到

粘贴代码后,自动获得可直接运行的单元测试文件,覆盖主要场景,包含边界值和异常处理测试。

🛠 需要什么

  • github

👤 适合谁

  • 开发者
  • 测试工程师

⚡ 效果预览

提交代码后自动生成单元测试,覆盖率提升30%+,无需手写重复测试代码

⚠️ 待验证案例:本案例基于 OpenClaw 代码生成能力的真实描述,生成的测试代码需要开发者审查后使用。如果你跑通了,欢迎联系站长提交验证记录。

解决什么问题

写单元测试是好习惯,但也是最让开发者拖延的事——思路清楚,但写起来费时间,尤其是边界用例和异常处理。这个场景让 OpenClaw 帮你生成测试初稿:

  • 谁会用到:需要提升测试覆盖率的开发者,或者想快速给遗留代码补测试的工程师
  • 省了什么:不用手写每一条测试用例,不用自己想边界值
  • 效果是什么:粘贴代码,几分钟内得到可运行的测试文件,再手工审查调整

前置条件

  • OpenClaw 已安装
  • 有需要测试的代码(支持 Python、JavaScript/TypeScript、Go、Java 等主流语言)
  • Claude Max 账号,或 Anthropic API Key

用到的工具

工具用途获取方式
anthropic/claude-sonnet-4-6分析代码逻辑、生成测试用例Claude Max 账号
代码执行(内置)验证测试可以运行OpenClaw 内置

预期结果

输入(一个 Python 函数):

def calculate_discount(price: float, discount_rate: float) -> float:
    """计算折后价格"""
    if discount_rate < 0 or discount_rate > 1:
        raise ValueError("折扣率必须在 0 到 1 之间")
    return price * (1 - discount_rate)

输出(自动生成的测试文件):

import pytest
from your_module import calculate_discount

class TestCalculateDiscount:
    # 正常用例
    def test_normal_discount(self):
        assert calculate_discount(100.0, 0.2) == 80.0

    def test_no_discount(self):
        assert calculate_discount(100.0, 0) == 100.0

    def test_full_discount(self):
        assert calculate_discount(100.0, 1.0) == 0.0

    # 边界用例
    def test_small_price(self):
        assert abs(calculate_discount(0.01, 0.5) - 0.005) < 1e-9

    def test_large_price(self):
        result = calculate_discount(1_000_000, 0.1)
        assert result == 900_000.0

    # 异常用例
    def test_negative_discount_raises(self):
        with pytest.raises(ValueError, match="折扣率必须在 0 到 1 之间"):
            calculate_discount(100.0, -0.1)

    def test_discount_over_one_raises(self):
        with pytest.raises(ValueError):
            calculate_discount(100.0, 1.1)

    # 浮点精度
    def test_float_precision(self):
        result = calculate_discount(10.0, 0.1)
        assert abs(result - 9.0) < 1e-9

最简上手

为单个函数生成测试

帮我为以下 Python 函数生成 pytest 单元测试:

(粘贴你的函数代码)

要求:
1. 覆盖正常用例(至少3个)
2. 覆盖边界用例(0值、最大值、空值等)
3. 覆盖异常用例(非法输入、类型错误等)
4. 使用 pytest 格式,组织成测试类
5. 每个测试方法加简短注释说明测试意图

生成完直接可以保存为 test_xxx.py 运行。

为整个模块生成测试

我有一个 Python 模块,文件路径是 /path/to/utils.py
请读取文件,为其中的每个公开函数(不以 _ 开头的)生成单元测试。

要求:
- 每个函数至少3个测试用例
- 关注函数的边界条件和错误处理
- 生成一个 test_utils.py 文件,保存到同目录

生成后告诉我每个函数大概覆盖了哪些场景。

指定测试框架

JavaScript/TypeScript(Jest)

帮我为以下 TypeScript 函数生成 Jest 单元测试:

(粘贴代码)

使用 Jest + TypeScript,包含:
- describe 块组织
- 正常用例、边界用例、异常用例
- mock 外部依赖(如有)

Go

帮我为以下 Go 函数生成单元测试:

(粘贴代码)

使用 Go 标准库 testing 包,包含:
- Table-driven tests 格式
- 覆盖各种输入情况
- 测试错误返回值

Java(JUnit 5)

帮我为以下 Java 类生成 JUnit 5 单元测试:

(粘贴代码)

要求:使用 @Test, @ParameterizedTest, assertThrows 等现代 JUnit 5 特性。

进阶:根据现有测试补充缺失用例

这是我现有的测试文件:
(粘贴测试代码)

这是被测试的源代码:
(粘贴源代码)

请分析:
1. 当前测试覆盖了哪些场景?
2. 还有哪些重要场景没被覆盖?
3. 为缺失的场景补充测试用例

配合 CI 自动检查测试覆盖率

我的项目里新增了以下文件:
(列出新增/修改的文件路径)

请:
1. 读取这些文件
2. 检查是否有对应的测试文件
3. 如果没有,生成测试文件
4. 如果有,检查是否覆盖了新增的函数/方法

把结果告诉我,没有测试的函数需要我重点关注。

踩坑记录

生成的测试无法运行

症状:生成的测试文件有 import 错误或语法问题。

解法:告诉 OpenClaw假设源文件在同目录,import 路径请根据实际情况调整,然后把错误信息发给 OpenClaw,让它修复。

测试用例太简单

症状:生成的测试只有最基本的用例,缺少边界值。

解法:明确要求重点覆盖边界条件:空字符串、None/null、负数、超大值、特殊字符。

Mock 不对

症状:函数有外部依赖(数据库、HTTP请求),生成的测试没有正确 mock。

解法:在 prompt 里说明这个函数依赖 requests.getdb.query,请用对应的 mock 框架处理。

不满意怎么调

  • 想要更高覆盖率 → 目标是行覆盖率 90% 以上,请补充更多用例
  • 想要性能测试 → 同时生成一个基准测试(benchmark)
  • 想要集成测试 → 这是集成测试场景,不要 mock 外部依赖,改为测试真实的数据库调用
  • 想要自动运行 → 让 OpenClaw 生成后直接在本地运行 pytest,并报告通过/失败情况
#开发#单元测试#代码质量#自动化#效率工具