单元测试入门

使用 Visual Studio 定义和运行单元测试来维护代码运行状况,确保代码覆盖率,并在客户之前查找错误和故障。 频繁运行单元测试,确保代码正常工作。

在本文中,代码使用 C# 和C++,插图位于 C# 中,但概念和功能适用于 .NET 语言、C++、Python、JavaScript 和 TypeScript。

创建单元测试

本部分介绍如何创建单元测试项目。

  1. 打开要在 Visual Studio 中测试的项目。

    为了演示示例单元测试,本文测试名为 HelloWorld 的简单“Hello World”C# 或C++控制台项目。 此类项目的示例代码如下所示:

    namespace HelloWorld
    {
       public class Program
       {
          public static void Main()
          {
             Console.WriteLine("Hello World!");
          }
       }
    }
    
  2. 解决方案资源管理器中,选择解决方案节点。 然后,从顶部菜单栏中,选择“ 文件>添加新>项目”。

  3. 在新项目对话框中,找到要使用的单元测试项目。

    在搜索框中键入 测试 ,找到要使用的测试框架的单元测试项目模板,例如 MSTest (C#)或 本机单元测试 项目(C++),然后选择它。

    Visual Studio 中的 .NET 语言包括适用于 NUnit 和 xUnit 的内置模板。 对于 C++,在本示例中,选择 本机单元测试 项目,该项目使用 Microsoft 本机单元测试框架。 (若要使用不同的C++测试框架,请参阅 编写适用于 C/C++ 的单元测试)。 有关 Python,请参阅 在 Python 代码中设置单元测试 以设置测试项目。

    小窍门

    本文介绍如何手动创建单元测试。 若要从现有代码自动生成测试,请参阅 使用适用于 .NET 的 GitHub Copilot 测试生成和运行单元测试,或者对于其他语言,请参阅 在 GitHub Copilot 中使用斜杠命令

    小窍门

    本文介绍如何手动创建单元测试。 如果要从现有代码自动生成测试,请参阅 从代码创建 C# 单元测试方法存根或其他语言,请参阅 GitHub Copilot 中的“使用斜杠”命令

    下图显示了 .NET 中支持的 MSTest 单元测试。

    Visual Studio 2022 中的单元测试项目模板

    单击“ 下一步”,选择测试项目的名称,然后单击“ 创建”。

    项目已添加到解决方案中。

    解决方案资源管理器中的单元测试项目

  4. 在单元测试项目中,通过右键单击 “引用 ”或“ 依赖项 ”并选择“ 添加引用 ”或 “添加项目引用”来添加对要测试的项目的引用。

  5. 选择包含要测试的代码的项目,然后单击“ 确定”。

    在 Visual Studio 中添加项目引用

  6. 将代码添加到单元测试方法。

    例如,可以通过选择与测试框架匹配的正确文档选项卡来使用以下代码:MSTest、NUnit 或 xUnit(仅在 .NET 上受支持),或C++Microsoft本机单元测试框架。

    using Microsoft.VisualStudio.TestTools.UnitTesting;
    using System.IO;
    using System;
    
    namespace HelloWorldTests
    {
       [TestClass]
       public class UnitTest1
       {
          private const string Expected = "Hello World!";
          [TestMethod]
          public void TestMethod1()
          {
             using (var sw = new StringWriter())
             {
                Console.SetOut(sw);
                HelloWorld.Program.Main();
    
                var result = sw.ToString().Trim();
                Assert.AreEqual(Expected, result);
             }
          }
       }
    }
    

运行单元测试

  1. 打开 测试资源管理器

    若要打开测试资源管理器,请从顶部菜单栏中选择 “测试>测试资源管理器 ”(或按 Ctrl + ET)。

  2. 单击“ 全部运行 ”(或按 Ctrl + RV)运行单元测试。

    在测试资源管理器中运行单元测试

    测试完成后,绿色复选标记指示测试已通过。 红色的“x”图标指示测试失败。

    在测试资源管理器中查看单元测试结果

小窍门

可以使用 测试资源管理器 从内置测试框架(MSTest)或第三方测试框架运行单元测试。 可以将测试分组为类别、筛选测试列表,以及创建、保存和运行测试播放列表。 还可以调试测试,并分析测试性能和代码覆盖率。

查看实时单元测试结果(Visual Studio Enterprise)

如果在 Visual Studio 2017 或更高版本中使用 MSTest、xUnit 或 NUnit 测试框架,可以查看单元测试的实时结果。

注释

若要执行这些步骤,需要 Visual Studio Enterprise 以及 .NET 代码和以下测试框架之一:MSTest、xUnit 或 NUnit。

  1. “测试”菜单选择“实时单元测试”,然后选择>,启动实时单元测试。

    在 Visual Studio 2022 中启动实时单元测试

  2. 编写和编辑代码时,在代码编辑器窗口中查看测试的结果。

    查看测试结果

  3. 单击测试结果指示器可查看详细信息,例如涵盖该方法的测试的名称。

    选择测试结果指示器

有关实时单元测试的详细信息,请参阅 Live 单元测试

使用第三方测试框架

可以使用 NUnit、Boost 或 Google C++ Testing Framework 等第三方测试框架在 Visual Studio 中运行单元测试,具体取决于编程语言。 使用第三方框架:

  • 使用 NuGet 包管理器 为所选框架安装 NuGet 包。

  • (.NET)从 Visual Studio 2017 版本 14.6 开始,Visual Studio 包括 NUnit 和 xUnit 测试框架的预配置测试项目模板。 这些模板还包括启用支持所需的 NuGet 包。

  • (C++)在 Visual Studio 2017 及更高版本中,已包含 Google C++ Testing Framework 等一些框架。 有关详细信息,请参阅 在 Visual Studio 中为 C/C++ 编写单元测试

如何添加单元测试项目:

  1. 打开包含要测试的代码的解决方案。

  2. 右键单击 解决方案资源管理器 中的解决方案,然后选择“ 添加新>项目”。

  3. 选择单元测试项目模板。

    在此示例中,选择“NUnit

    Visual Studio 2022 中的 NUnit 测试项目模板

    项目模板包括对 NUnit 和 NUnit3TestAdapter 的 NuGet 引用。

    解决方案资源管理器中的 NUnit NuGet 依赖项

  4. 将测试项目中的引用添加到包含要测试的代码的项目。

    右键单击 解决方案资源管理器中的项目,然后选择“ 添加>引用”。 (还可以从 “引用 ”或 “依赖项 ”节点的右键单击菜单中添加引用。

  5. 将代码添加到测试方法。

    将代码添加到单元测试代码文件

  6. 测试资源管理器 运行测试,或者右键单击测试代码并选择 “运行测试”(Ctrl + RT)。

后续步骤