手动创建VS单元测试,显示代码覆盖率

2023-05-16,,

Visual Studio 号称有史以来最强大的IDE,确实如此。创建单元测试也是一键完成:在方法的代码块中右键“Create Unit Test…”,勾选测试项,填项目名,完成。VS就会自动帮你创建好了一个工程,直接写测试方法就好。这创建出来的工程也就是一个普通的类库(class library),所以今天我就打算手动创建一个单元测试工程,但是最后却发现总是无法显示代码覆盖率

发现问题,解决问题:反复对比手动创建和自动创建的工程,所有的属性都没区别。但是有一点引起了我的注意,右键工程名-Add,区别出来了:

自动创建的Unit Test类库好像被打上了标签,能够被VS识别为单元测试工程。但是所有的工程属性对比后都一样,然后我就想到了另外一个文件.csproj,看这个后缀名就知道这个文件的作用了:C Sharp Project,用来记录工程项目的一些信息。对比这两个项目的.csproj文件就能找出来差别了,自动创建的单元测试工程多了一条标签:

 1 <PropertyGroup>

 2 <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

 3 <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

 4 <ProductVersion>8.0.30729</ProductVersion>

 5 <SchemaVersion>2.0</SchemaVersion>

 6 <ProjectGuid>{4D38A077-23EE-4E9F-876A-43C33433FFEB}</ProjectGuid>

 7 <OutputType>Library</OutputType>

 8 <AppDesignerFolder>Properties</AppDesignerFolder>

 9 <RootNamespace>Example.ManualUnitTest</RootNamespace>

 <AssemblyName>Example.ManualUnitTest</AssemblyName>

 <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>

 <FileAlignment>512</FileAlignment>

 <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

 </PropertyGroup>

多了ProjectTypeGuids这个标签,查了资料两个guid分别对应的是:

Guid {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}:  C# project
Guid {3AC096D0-A1C2-E12C-1390-A8335801FDAB}: “Test Project Flavor”

这样子VS就能识别出这个项目是个Test Project了。如果是VB.net工程的话,第一个GUID就要换成{F184B08F-C81C-45F6-A57F-5ABD9991F28F}。

这个解决了代码覆盖率就正常了。

这里记录一下手动创建单元测试工程的步骤,以备日后查阅:

    创建一个“Class Library”工程,添加Microsoft.VisualStudio.QualityTools.UnitTestFramework引用,和需要测试工程的应用
    右键新建的工程-“Unload Project”;卸载了之后,再右键-“Edit xxxx.csproj”;在第一个ProjectGroup标签中加入<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>;保存之后就可以右键工程-“Reload Project”
    右键Solution,创建新项,选择Test Setting,确定之后在弹出来的窗口按如下配置:(如果solution中已有Local.testsettings文件就不需要创建了,直接双击)

    点击config,选择需要测试工程的dll就可以了。

    在VS菜单栏中选择Test-Windows-Code Coverage Results
    完成,可以开始编写单元测试了

手动创建VS单元测试,显示代码覆盖率的相关教程结束。

《手动创建VS单元测试,显示代码覆盖率.doc》

下载本文的Word格式文档,以方便收藏与打印。