使用 GitHub Copilot 对话助手 视图生成单元测试
Visual Studio Code中的聊天视图是使用 GitHub Copilot 生成单元测试的主要位置。 在“聊天”视图中,可以配置测试框架、为文件或选择生成测试,并优化结果,直到测试与项目的约定匹配。 本单元重点讲解 Agent 模式:它会将生成的测试直接写入测试文件,可以运行生成后的测试,并针对失败情况继续迭代,而这一切都只需一个聊天提示即可完成。 还可以事先使用 “询问”模式 浏览测试选项,而无需进行任何文件更改。
打开聊天视图
使用以下任一选项打开聊天视图:
- 按 Ctrl + Alt + I (Windows//) Linux) 或 Cmd + Alt + I(macOS)。
- 选择标题栏中的GitHub Copilot图标,然后选择Toggle Chat。
聊天视图将在辅助侧栏中打开,并提供三种配置选项,这些配置选项会影响你发送的每个提示:
- 代理目标:代理运行的位置。 选择 “本地 ”,在编辑器中以交互方式运行代理,对工作区、工具和模型具有完全访问权限。
- 代理:AI 为会话所承担的角色。 内置本地代理是 Ask、 Plan 和 Agent。
- 权限级别:调用工具和终端命令时代理具有多少自治性。 选项包括 默认审批、 绕过审批和 Autopilot。
对于单元测试生成,建议的起点是具有默认审批的智能体。 代理模式可以编辑文件、运行终端命令和重新运行测试,因此,它可以采用“生成此方法的测试”等提示,并生成只需查看的工作测试文件。 默认审批会通过要求你确认每次工具调用,让你随时掌握情况。
(可选)使用 Ask 模式先浏览测试选项
提问模式会在聊天中回答问题,而不会修改文件或调用工具。 在要让智能体进行任何更改之前先规划好方案时,这非常有用。 在以下情况下使用 Ask 模式:
- 在确定结构之前,先比较复杂方法的候选测试用例。
- 确定值得覆盖的边缘事例和边界条件。
- 获取测试框架或断言样式的建议。
- 查看聊天中的示例测试,而不将其写入磁盘。
若要使用 Ask 模式进行分析,请执行以下操作:
打开聊天视图,然后从代理选取器中选择 “询问 ”。
附加相关文件或选择作为上下文(例如,使用
#selection或拖动文件)。提出分析问题。 例如:
What edge cases should I cover when testing the CalculateDiscount method? List the scenarios and explain why each one matters.查看响应,然后将代理选取器切换到 代理 以生成实际测试。
使用 /setupTests 搭建测试框架
如果项目尚未配置测试框架,GitHub Copilot可以推荐一个并引导你完成配置步骤。
/setupTests斜杠命令适用于任何代理,但代理模式也可以安装包并创建测试项目。
打开“聊天”视图,然后从代理选取器中选择 “代理 ”。
在
/setupTests聊天输入字段中输入命令。确认智能体为安装包、为测试项目搭建基架以及加以 Visual Studio Code 测试扩展而建议的工具调用和终端命令。
在启动新的测试项目,或将尚未包含测试的项目纳入其中时,/setupTests 最有用。
使用 /tests 生成测试
/tests斜杠命令为编辑器中当前处于活动状态的代码生成单元测试。 在代理模式下,生成的测试将直接写入适当的测试文件中。 GitHub Copilot检测现有的测试框架和编码样式,并生成匹配的测试。
若要为整个文件生成测试,请执行以下操作:
打开要测试的应用程序代码文件。
打开“聊天”视图并确认选择了 “代理 ”。
在聊天输入框中,输入
/tests,然后输入任何其他说明。 例如:/tests Generate unit tests for the methods in this file. Include success, failure, and edge cases.确认代理用于读取上下文、编写测试以及(可选)运行它们的工具调用。
查看该代理所做的更改。
当一个测试文件可用时,代理会将测试追加到现有测试文件中,或在适当的位置创建新的测试文件。 差异会显示在编辑器中,方便您核查每一项更改。
选择 “保留 或 撤消 ”以接受或放弃更改。
为特定方法或代码块生成测试:
打开应用程序代码文件。
选择要测试的方法或块。
在“聊天”视图中,依次输入
/tests和引用所选内容的指导。 例如:/tests Generate unit tests for the selected method. Validate both success and failure, and include edge cases.审核并保留或放弃所得更改。
使用自然语言提示生成测试
无需使用斜杠命令。 当你包含足够的上下文时,代理会根据自然语言提示生成测试。 示例:
- “为此文件中的方法生成 xUnit 测试,并将其添加到 Calculator.Tests 项目。
- “为
CalculateDiscount该方法编写单元测试,包括负值和零的边缘事例。 编写好测试后再运行测试。 - “在此模块中为数据访问层创建集成测试。
由于代理可以运行命令,因此可以在同一提示中包含验证步骤。 让代理在编写测试后运行测试,以便捕获并修复明显的故障,然后再将工作交给你。
为提示添加上下文
生成的测试的质量取决于所提供的上下文。 使用以下一个或多个选项将上下文附加到聊天视图提示:
- 添加上下文 按钮:打开快速选取以添加文件、文件夹、符号或当前编辑器选择。
- 拖放:从资源管理器视图中拖动文件,或将编辑器选项卡拖到“聊天”视图中以附加内容。
-
#提及:依次输入#以及文件、文件夹或符号名称,以将其添加为上下文。 使用#selection附加当前编辑器选择,或#codebase让GitHub Copilot搜索工作区以获取相关上下文。 - 外部文件:在编辑器中打开 Markdown 文件(例如参与者指南或测试约定),并通过 “添加上下文”附加它们。 智能体使用这些内容来构建生成的测试。
例如,如果单个方法在编辑器中可见,可以询问: Write a unit test for the method in #editor 如果多个方法可见,或者目标方法超出了可见区域,请先选择代码并询问: #selection write unit tests for the selected code
查看并优化智能体的更改
即使代理将测试直接写入测试项目,你仍能控制以下情况:
- 查看差异:智能体更改的每个文件都会在编辑器中打开,并突出显示提议的编辑。 在接受前先浏览一遍差异。
- 保留或撤消:使用 Keep 接受更改,或 撤消 以还原这些更改。 还可以从编辑器中还原单个块。
- 构建并运行:保存更改后,构建测试项目,并通过“测试资源管理器”或终端运行测试,以确认一切均可成功编译且测试通过。
- 循环访问:在同一聊天会话中使用后续提示来优化特定测试、添加更多事例或重命名方法。
使用自定义指令生成个性化测试
如果组织具有特定的测试要求,则可以自定义GitHub Copilot生成测试的方式,使输出符合标准。 自定义指令可让您:
- 指定首选测试框架(例如 xUnit 而不是 NUnit)。
- 定义测试类和方法的命名约定。
- 设置代码结构首选项,如 Arrange-Act-Assert 模式。
- 请求特定的测试模式,例如边界值的参数化测试。
将自定义说明存储在工作区中的 *.instructions.md 文件中。 使用 applyTo 元数据字段将这些指令仅应用于测试文件。 例如,值 applyTo: tests/** 将说明范围限定为目录中的文件 tests/ 。 在源代码管理中共享文件可让团队中的每个开发人员使用相同的测试上下文。
Important
生成的测试用例可能并不涵盖每个方案。 仍需要手动评审和代码评审,以确保测试的质量。