单元测试入门

使用 Visual Studio 定义和运行单元测试,使代码保持正常运行、确保代码覆盖率并在客户之前找到错误和缺陷。 经常运行单元测试,确保代码正常运行。

在本文中,代码使用 C# 和 C++,图例使用 C#,但是概念和特征适用于 .NET 语言、C++、Python、JavaScript 和 TypeScript。

创建单元测试

本节介绍了如何创建单元测试项目。

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

    出于演示示例单元测试的目的,本文测试一个简单的“Hello World”C# 或名为“Hello World”的 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 单元测试。

    Unit test project template in Visual Studio 2022

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

    Unit test project template in Visual Studio 2019

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

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

    Unit test project in Solution Explorer

    Unit test project in Solution Explorer

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

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

    Add project reference in Visual Studio

    Add project reference in 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 + E,T)。

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

    Run unit tests in Test Explorer

    Run unit tests in Test Explorer

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

    Review unit test results in Test Explorer

    Review unit test results in Test Explorer

提示

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

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

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

注意

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

  1. 选择“测试”>“Live Unit Testing”>“启动”,从“测试”菜单启用 Live Unit Testing

    Start live unit testing in Visual Studio 2019

    Start live unit testing in Visual Studio 2022

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

    View the results of the tests

    View the results of the tests

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

    Choose the test result indicators

    Choose the test result indicators

有关 Live Unit Testing 的详细信息,请参阅 Live Unit Testing

使用第三方测试框架

通过使用第三方测试框架(例如 NUnit、Boost 或 Google C++ 测试框架,具体取决于你的编程语言),可以在 Visual Studio 中运行单元测试。 使用第三方框架:

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

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

  • (C++) 在 Visual Studio 2017 及更高版本中,已经包含了一些框架,如 Google C++ 测试框架。 有关详细信息,请参阅在 Visual Studio 中编写适用于 C/C++ 的单元测试

添加单元测试项目:

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

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

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

    在本例中,选择 NUnit

    NUnit test project template in Visual Studio 2022

    NUnit test project template in Visual Studio 2019

    单击“下一步”,为项目命名,然后单击“创建”

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

    NUnit NuGet dependencies in Solution Explorer

    NUnit NuGet dependencies in Solution Explorer

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

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

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

    Add code to your unit test code file

    Add code to your unit test code file

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

后续步骤