我们在使用VS 2017 Enterprise的构建计算机上执行了大量测试,我们在Visual Studio测试任务中启用了代码覆盖。此操作失败,并在TFS 2017控制台中出现以下错误:
##[section]Starting: Test Assemblies **\*test*.dll
Preparing task execution handler.
Executing the powershell script: d:\builds\4\_tasks\VSTest_ef087383-ee5e-42c7-9a53-ab56c98420f9\1.0.60\VSTest.ps1
C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\Extensions\TestPlatform
Working folder: d:\builds\4\3\s
Executing C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\Extensions\TestPlatform\vstest.console.exe "d:\builds\4\3\s\Source\u.a.testassembly.dll" /Settings:"C:\Users\username\AppData\Local\Temp\tmp9CCF.tmp" /EnableCodeCoverage /logger:trx /TestAdapterPath:"d:\builds\4\3\s"
Microsoft (R) Test Execution Command Line Tool Version 15.0.0.0
Copyright (c) Microsoft Corporation. All rights reserved.
##[error]The test source file "/EnableCodeCoverage" provided was not found.
使用Visual Studio 2015企业,测试是在代码覆盖率下执行的,没有错误。
我们将vstest.console.exe文件的路径作为自定义路径提供。
如果我在TFS 2017' Visual Studio测试'的复选框中禁用了代码覆盖率。任务并使用未指定代码覆盖收集器的runsettings文件,执行测试,但不报告代码覆盖率。
我还尝试禁用代码覆盖率复选框和
/EnableCodeCoverage
参数作为测试任务的命令行参数提供。这提供了与上面相同的错误。
我发现很多人在VS 2017中遇到代码覆盖问题,但这似乎与.NET核心项目有关?
感谢您的帮助! : - )
如果我尝试通过开发人员命令提示符运行vstest.console.exe,则无法成功指定/EnableCodeCoverage
选项。它提供以下错误消息:
Microsoft (R) Test Execution Command Line Tool Version 15.0.0.0
Copyright (c) Microsoft Corporation. All rights reserved.
The test source file "/EnableCodeCoverage" provided was not found.
如果在没有上述开关的情况下运行完全相同的命令,则不会出现此错误消息。
如果我使用Runsettings文件,而是指定数据采集器,则会收到与JSON相关的错误:
Cannot deserialize the current JSON object (e.g. {"name":"value"})
into type 'System.Collections.ObjectModel.Collection`1 Microsoft.VisualStudio.TestPlatform.ObjectModel.AttachmentSet]'
because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly.
如果我使用/ Diag开关,我会在日志文件中获得以下堆栈跟踪:
Stack Trace:
ved Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
ved Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
ved Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
ved Newtonsoft.Json.Linq.JToken.ToObject(Type objectType, JsonSerializer jsonSerializer)
ved Newtonsoft.Json.Linq.JToken.ToObject[T](JsonSerializer jsonSerializer)
ved Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.JsonDataSerializer.DeserializePayload[T](Message message)
ved Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.DataCollection.ProxyDataCollectionManager.<>c__DisplayClass6_0.<AfterTestRunEnd>b__0()
ved Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.DataCollection.ProxyDataCollectionManager.InvokeDataCollectionServiceAction(Action action, ITestMessageEventHandler runEventsHandler)
我们的构建服务器是Windows 2012标准服务器。除了安装Windows SDK有效负载之外,我们能够安装VS 2017而没有任何错误。之后我们不得不手动安装适用于Windows 8的Windows SDK,因为VS 2017 Enterprise中包含的Windows SDK有效负载并未在Windows Server 2012上安装。
我刚刚注意到VS 2008的Windows Server 2012不在the list of supported operating systems上?...
详细输出 vstest.console.exe /? 从VS 2017开发人员命令提示符运行时:
Microsoft (R) Test Execution Command Line Tool Version 15.0.0.0
Copyright (c) Microsoft Corporation. All rights reserved.
Usage: vstest.console.exe [Arguments] [Options] [[--] <args>...]]
Description: Runs tests from the specified files.
然后列出所有参数。在
/Enablecodecoverage
切换无处可寻。使用“开始”菜单中的快捷方式打开“开发人员命令提示符”。
我试图运行一个测试套件,其中datacollector是在.runsettings文件中定义的,而不是使用/ enablecodecoverage开关,但这会产生上面列出的JSON错误。
将我们的TFS内部部署升级到2017年更新1后,我们能够成功执行单元测试并获得代码覆盖率。
然而,我们正在使用SonarQube,显然在撰写市场扩展版本3.0.0中提供的SonarQube扫描仪时,由于VS 2017中完成的注册表项更改,因此无法正确找到代码覆盖率报告
关于此问题的bug report has been filed with SonarQube。
您可以通过手动创建名为&#39; ShellFolder&#39;的注册表值来解决此限制。在以下注册表项下:
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\VisualStudio\15.0
&#39; ShellFolder&#39;字符串值应为:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise
我已将这些信息留在此处,以防有人看到我们遇到的相同问题。