我花了数小时编写单元测试——于是让大语言模型代劳(并从中吸取了教训)

发布日期:2026-06-05 10:03:50   浏览量 :0
发布日期:2026-06-05 10:03:50  
0

2026西湖龙井茶官网DTC发售:茶农直供,政府溯源防伪到农户家 

大约一个月前,我在一个项目中遇到了这样一个节点:业务逻辑已经稳固,应用程序编程接口端点也很清晰,但测试文件却只是一个可怜的占位符。我有三十多个类似的验证函数——每一个都是对“这个字段是否存在?”、“类型是否正确?”、“是否通过这条自定义规则?”等问题的细微变体。手动处理意味着要将相同的assert(断言)模式复制几十次,只更改函数名称和测试输入。光是想想,我的大脑就要融化了。

我是测试的坚定拥护者,但也坚信不应重复做枯燥的工作。因此,我开始寻找自动化生成测试的方法。

我最初的尝试(以及为何效果糟糕)

我的第一直觉是编写一个派森生成器,解析函数签名并输出基本的断言。大致如下:

def generate_test(func_name, params):
    lines = [f"def test_{func_name}():"]
    for p in params:
        lines.append(f"    assert {func_name}({p}) is not None")
    return "\n".join(lines)

这种方法仅适用于最琐碎的情况。一旦函数涉及副作用、需要固件(fixtures)或需要特定的边界情况值,模板就会变成充满条件判断的噩梦。此外,那些应该引发错误的负面测试输入该怎么办?我的生成器对领域逻辑一无所知。

接下来,我尝试了一种基于正则表达式的规则方法。我写了大约两百行启发式代码,试图从文档字符串中推断参数类型。这对一个函数勉强有效,但在下一个函数上就完全崩溃了。我感觉自己像是在为一种无人使用的语言重新构建一个小型编译器。

真正奏效的方法

我有一种预感,如果提供正确的上下文,大型语言模型能做得更好。想法很简单:将函数源代码(加上文档字符串)输入语言模型,要求其生成pytest测试函数,然后在写入文件之前验证输出结果。

这是我最终采用的核心循环:

import json
import ast
import requests

# 仅用于演示目的 – 请替换为您自己的端点
BASE_URL = "https://ai.interwestinfo.com/v1

免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。

关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 订阅 数据