Visual Studio Blog

Today I will… improve test coverage

8.5内容质量
Today I will… improve test coverage

TL;DR · AI 摘要

通过Visual Studio代码覆盖率分析与GitHub Copilot测试代理,将Interview Coach应用测试覆盖率从37%提升至81%。

核心要点

  • 使用Visual Studio代码覆盖率分析工具定位测试缺口
  • GitHub Copilot测试代理可自动生成8个新测试用例
  • 全解决方案分析识别出3个无测试的项目并补充测试

结构提纲

按章节快速跳转。

  1. 介绍提升Interview Coach应用测试覆盖率的目标与现状

  2. 通过代码覆盖率分析确定当前测试缺口分布

  3. ·Copilot测试生成

    使用GitHub Copilot测试代理为InterviewSessionTool类生成测试用例

  4. 通过#solution上下文进行全项目测试缺口分析

  5. 覆盖率从37%提升至81%,识别出无测试价值的枚举文件

思维导图

用一张图看清主题之间的关系。

查看大纲文本(无障碍 / 无 JS 友好)
  • 测试覆盖率提升实践
    • 工具链
      • Visual Studio代码分析
      • GitHub Copilot测试代理
    • 实施步骤
      • 基线评估
      • 针对性测试生成
      • 全方案分析
    • 成果指标
      • 覆盖率提升44%
      • 新增3个项目测试

金句 / Highlights

值得收藏与分享的关键句。

#Visual Studio#GitHub Copilot#测试覆盖率#单元测试
打开原文

今天我将... 提高测试覆盖率 - Visual Studio 博客

今天我想探讨如何提高 Interview Coach 应用程序的测试覆盖率。该应用程序已经包含了一些单元测试,但我确信还有改进空间。

确定基准线

在开始编写测试之前,先了解当前的覆盖率基准是非常有必要的,这样我们才能找出测试的缺口,而不是为了编写测试而编写测试。

我们可以通过“为所有测试分析代码覆盖率”功能来实现这一点,该功能可以通过命令面板(CTRL + SHIFT + P)或测试菜单访问。

运行分析器后,我们可以看到当前的覆盖率情况:

看起来我们的覆盖率并不理想,InterviewCoach.Agent 项目存在大量缺口,而其他项目如 InterviewCoach.Mcp.InterviewData 甚至没有测试。让我们从该项目中 InterviewSessionTool 类的测试开始。

使用 Copilot 编写测试

我们要为其编写测试的类是一个简单的类,它接收我们仓库的接口,这样我们可以模拟数据库调用,方法接收有效负载以与仓库交互。

为了加快进度,我们将使用 GitHub Copilot 的测试代理,并向其提供要编写测试的文件。

代理将分析该类,然后分析整个解决方案以找到编写测试的正确方法。由于该项目目前还没有测试类,它将生成一个测试类,添加引用,然后编写测试用例。

几分钟后,代理完成了工作。

它给出了已完成内容的简洁摘要:我们新增了 8 个测试,并创建了一个新的测试项目。测试已运行,它建议我们再次运行覆盖率报告。

与之前相比,这是一个显著的提升。

全解决方案测试分析

测试代理已经很好地为我们的类构建了测试,但代码库中仍有大量代码未被测试,我们可以使用测试代理来帮助解决这个问题,因为它可以被指示在整个解决方案中运行并分析我们的缺口:

code
@test #solution

这次,我们使用了 Copilot 的 #solution 上下文,现在测试代理将分析所有项目和代码路径。几分钟后,Copilot 给我返回了覆盖仓库、DbContext、我们的扩展方法以及 InterviewCoach.Agent 项目中更多测试的测试用例。它还识别出像 AgentMode.cs 这样的文件不需要编写测试,因为它只包含一个枚举,因此没有可测试的内容。

通过这些改进,我们的覆盖率提升到了 81%,从最初的 37% 提升,现在包括了我们最初完全没有测试的三个项目。

总结

虽然我们了解编写测试的价值,但知道在哪里投入努力往往被忽视。使用 Visual Studio 的代码覆盖率分析可以为我们提供概览,帮助我们识别测试中的缺口,然后结合测试代理,我们可以为单个类构建有针对性的测试,或执行整个解决方案的分析并提升覆盖率。

.entry-content

AI 免责声明 /think