单元测试入门

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

    小窍门

    仅对于 C#,可以使用更快的方法从代码创建单元测试项目。 有关详细信息,请参阅 创建单元测试项目和测试方法。 若要将此方法用于 .NET Core 或 .NET Standard,需要 Visual Studio 2019 或更高版本。

    下图显示了 .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)。

后续步骤