AI 编程测试工具可以帮你补测试,但测试是否有价值,要看它能否检查独立的需求和边界。下面用 GitHub Copilot 在 VS Code 为一个 Python 用户名函数补测试,再用标准库 unittest 运行。这是教学任务;没有实测 Copilot 生成了哪些测试,也不把示例当成生产账号系统。
先固定函数要求和执行环境
准备 Python 3、已启用 GitHub Copilot 的 VS Code 和一个独立练习目录。这里使用 Python 标准库 unittest,不需为示例安装第三方测试库。真实项目已有 pytest、Jest 等框架时,应复用原有框架,不额外搭建另一套。

教学契约是:用户名必须是字符串,长度为 3–20,只允许 ASCII 英文字母、数字和下划线;不符合时返回 False。将下面代码保存为 username.py:
import re
def validate_username(value):
return isinstance(value, str) and re.fullmatch(
r"[A-Za-z0-9_]{3,20}", value
) is not None
长度、字符范围和非字符串输入都是人为规定的教学需求,不代表所有网站都应该采用这套用户名规则。
让 Copilot 先看测试约定,再生成文件
打开 Chat,在模式选择器里选择 Agent,附加 username.py。参照 VS Code 官方用 AI 测试现有代码指南,先要求它检查项目测试框架和运行命令;本例明确使用 unittest。可发出:
给 username.py 的 validate_username 补单元测试。
先列案例,不改文件:3–20 个 ASCII 字母、数字或下划线有效;
长度 2、21,无效字符、非字符串应返回 False。
确认案例后,只创建 test_username.py,使用 unittest。
不要修改 username.py,不新增依赖,不把被测函数的结果当预期值。
运行测试时报告具体命令、失败和跳过数;不要为了变绿删断言。
检查 Agent 的文件修改和终端命令,确认它只生成练习测试文件。预期结果来自前面写下的契约;让 AI 完全照着当前实现反推测试,可能把已有错误也固定下来。
一份可检查的测试参考
下面是教学参考文件,用于核对 AI 提供的案例是否遗漏边界,并非声称来自某次真实生成:
import unittest
from username import validate_username
class UsernameTests(unittest.TestCase):
def test_lower_boundary(self):
self.assertTrue(validate_username("abc"))
def test_upper_boundary(self):
self.assertTrue(validate_username("a" * 20))
def test_outside_boundaries(self):
for value in ("ab", "a" * 21, ""):
with self.subTest(value=value):
self.assertFalse(validate_username(value))
def test_allowed_characters(self):
self.assertTrue(validate_username("A_9"))
def test_forbidden_characters(self):
for value in ("a b", "中文名", "abc-", "abc\n"):
with self.subTest(value=value):
self.assertFalse(validate_username(value))
def test_non_strings(self):
for value in (None, 123, ["abc"]):
with self.subTest(value=value):
self.assertFalse(validate_username(value))
保存为 test_username.py,确保两个文件在同一目录。Python 的 unittest 官方文档说明了 TestCase、断言、subTest 和命令行运行方式。在该目录执行:
python -m unittest -v test_username
这份参考文件有六个测试方法,部分方法包含多个子案例。按给定实现与契约,它们应全部通过;末尾应显示执行了六个测试并给出 OK。真实输出若不是六个,先核对文件名、目录和加载结果,避免把“没有发现测试”当作成功。
失败后先区分是测试错还是实现错
| 现象 | 检查方法 |
|---|---|
| 无法导入 username | 核对两个文件是否同目录、终端当前目录和文件名,不要先改业务代码。 |
| 边界断言失败 | 回看契约中 3 和 20 是否包含,检查实现是否把边界写成严格大于或小于。 |
| 只有“运行没异常”的检查 | 补明确 True/False 断言;能调用函数不代表输出正确。 |
| Agent 修改了实现或跳过测试 | 检查差异,恢复无关变动,先确认失败原因再决定是否单独修复实现。 |
下一步是在真实项目选一个有明确需求的小函数,先运行已有相关测试作基线,再补遗漏的正常、边界和异常案例。检查新增测试的断言后,运行该文件与关联测试集。高覆盖率或全部变绿都不能证明需求正确;用错误期望、过度模拟或未运行的测试无法形成有效验证。本文操作文档核验于 2026 年 10 月 1 日。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/30177.html