Visual Studio 2017 的实时单元测试

[原文发表地址]: Live Unit Testing in Visual Studio 2017 RC

[原文发表时间]: November 18, 2016

我们非常自豪地在Visual Studio 2017引进了一个新的特性叫实时单元测试!这个特性会使您很容易的维护产品质量和测试覆盖率,并且将生产力提升到一个全新的水平。想象下您正在一个完全不熟悉的代码库中修补一个缺陷,在您为了修补这个缺陷编辑完代码后,根据实时单元测试您可以立马知道系统受影响的部分。有了这个反馈,跟原来相比,当您修改代码时将会带给您额外的信心,让您的工作更富有成效,甚至让您喜欢上修复缺陷和编写单元测试,何乐而不为呢!

当您编辑代码时,实时单元测试在后台自动运行受影响单元测试,并在编辑器中实时显示结果和代码覆盖率。除了对您的更改会对现有测试产生的影响提供反馈之外,您还可以即时获得有关您添加的新代码是否已经被一个或多个现有测试覆盖的反馈。这会很好的提醒您在错误修复或者添加功能时编写单元测试。

实时单元测试存在于Visual Studio 2017的企业版本中,它可用于面向.NET Framework的C#和VB项目。它使用VB和C#编译器在编译时测试代码。接下来,它对测试代码运行单元测试以生成数据,分析该数据以了解哪些测试覆盖了哪些代码行。 然后它使用这些数据运行那些受到给定编辑影响的测试,提供对编辑器本身的结果的即时反馈。 随着更多的编辑或更多的测试被添加或删除,它不断地更新用于识别受影响的测试的数据。

如何启用实时单元测试

启用实时单元测试,通过打开顶层菜单栏中的Test命令,然后选择对应的命令来启用它,如下图所示。

 

在Visual Studio里,实时单元测试适用于三个流行的单元测试框架, 即MSTest,xUnit和NUnit。使用这些时,您需要确保适配器和框架符合或超过以下给出的最低版本。请从现有项目中删除旧的适配器和测试框架引用(确保您删除的是 “Microsoft.VisualStudio.QualityTools.UnitTestFramework”的引用),并添加新的,如果实时单元测试不能正常工作。 你可以从NuGet.org得到所有这些。

  • 对于xUnit,您将需要xunit.runner.visualstudio 2.2.0-beta3-build 1187和xunit 2.0版本(或更高版本)
  • 对于NUnit,您需要NUnit3TestAdapter 3.5.1版本和NUnit版本3.5.0(或更高版本)
  • 对于MSTest,您将需要MSTest.TestAdapter 1.1.4-预览版和MSTest.TestFramework 1.0.5预览版(或更高版本)

 体验实时单元测试

启用后,实时单元测试可帮助您快速查看您所编写的代码是否被覆盖,以及覆盖该代码的测试是否通过,而无需离开编辑器。 单元测试结果和覆盖可视化在代码编辑器中逐行显示,如下面的示例图所示: 如果一行可执行代码被至少一个失败的测试覆盖,实时单元测试将用红色“×”来标识它。

如果一行可执行代码只被通过的测试覆盖,实时单元测试将用绿色“✓”来标识它。

如果一行可执行代码没有被任何测试覆盖,实时单元测试将用蓝线来标识它。

实时单元测试提供的实时代码覆盖和测试结果信息消除了手动选择和运行测试的负担。 实时反馈还用于当您的更改破坏了程序时立即通知您, 如果内嵌可视化结果从绿色“✓”变为红色“×”,您就知道您破坏了一个或多个测试。

在任何时间点,您可以将鼠标悬停在“✓”或“×”上,可以查看指定代码影响了多少处测试,如下图所示:

你可以通过点击“✓”或“×,查看指定代码影响了哪些测试,如下图所示。

当悬停在工具提示框中的错误的代码行上,它会扩展开提供更多信息,以便更好地了解故障,如下图所示。

此外,您可以通过点击工具提示框中的信息直接导航到具体错误的代码行。 然后,通过失败的测试信息提示,您可以轻松地调试产品代码,进行编辑,并继续,然而实时单元测试仍在后台运行。 无需停止和重新启动实时单元测试进行调试、编辑等。

在任何时候,您都可以暂停或完全停止实时单元测试。 例如,当你正在重构代码,你知道单元测试会被破坏一段时间。它就可以打开顶层菜单栏中的Test命令,然后选择“暂停”或者“停止”命令,如下图所示。

暂停时,您将在编辑器中看不到任何覆盖可视化结果。 当您准备好再次查看它们时,可以通过单击实时单元测试菜单中的“继续”来取消暂停。 当处于暂停模式时,实时单元测试仍保留它迄今收集的所有数据。 在“继续”模式下,实时单元测试将进行必要的工作,以赶上暂停时进行的所有编辑,并将适当更新结果。

如果您愿意,也可以完全停止实时单元测试。 当停止实时单元测试后再次启动时,显示结果所需的时间比暂停后再继续时长些。 这是因为停止时它要清空了所有数据。

总结

实时单元测试能提高开发人员生产率,测试覆盖率和软件质量。.NET开发人员,请在Visual Studio 2017中查看此功能。对于属于执行测试驱动开发的团队的开发人员,实时单元测试将游戏化其工作流程; 换句话说,他们的测试将首先失败,当他们实现每种方法,他们会看到它们变成绿色。 这种感觉就如同当你练习艺术时,获得一个旁边专注的看着你的教练的赞同!

观看此实时单元测试视频,视频中我们详细演示了此功能。