使用 GitHub Copilot 生成单元测试

本文介绍如何在 Visual Studio 命令和 GitHub Copilot 的帮助下使用 xUnit 框架在 C# 中生成单元测试和测试项目。 结合使用 Visual Studio 与 GitHub Copilot 极大地简化了生成和编写单元测试的过程。

创建测试项目

假设有一个ProductServiceGetProductById依赖于接口IProductDataStorage的方法ICacheClient的类。

public class ProductService(
    IProductDataStorage productDataStorage,
    ICacheClient cacheClient)
{
    public async Task<Product?> GetProductById(int productId)
    {
        var product = await cacheClient.GetProduct(productId);

        if (product is not null)
        {
            return product;
        }

        product = await productDataStorage.GetProduct(productId);

        if (product is not null)
        {
            await _cacheClient.SetProduct(product);
        }

        return product;
    }
}

若要生成测试项目和存根方法,请执行以下步骤:

  • 选择该方法。
  • 右键单击并选择“ 创建单元测试”。

命令创建单元测试

在“创建单元测试”对话框中,从“测试框架”下拉菜单中选择 xUnit

注释

“创建单元测试”命令默认为 MSTest 框架。 但是,由于此示例使用 xUnit,因此需要安装 Visual Studio 扩展 xUnit.net.TestGenerator2022

“创建单元测试”窗口

  • 如果还没有测试项目,请选择 “新建测试项目 ”或选择现有的测试项目。
  • 如有必要,请为命名空间、类和方法名称指定模板,然后单击“ 确定”。

几秒钟后,Visual Studio 将拉取所需的包,你将获得一个生成的 xUnit 项目,其中包含所需的包和结构、对要测试的项目的引用,以及 ProductServiceTests 类和存根方法。

生成的存根方法

自行生成测试

  • 再次选择要测试的方法。

  • 右键单击并选择“ 询问 Copilot”。

  • 输入简单的提示,例如:

    “使用 xunit、nsubstitute 生成单元测试,并将结果插入 #ProductServiceTests 文件中。

    在键入 # 字符时,您需要选择您的测试类。

小窍门

对于快速搜索,最好 ProductServiceTests 在单独的选项卡中打开。

生成测试的提示

执行提示,单击“ 接受”,Copilot 将生成测试代码。 之后,剩下的就是安装必要的软件包。

安装包后,可以运行测试。 此示例处理了第一次尝试:Copilot 知道如何使用 NSubstitute,并且所有依赖项都通过接口定义。

生成的测试