错误:VS2017 Live Unit Testing - 只有减号 - 不起作用

Posted

技术标签:

【中文标题】错误:VS2017 Live Unit Testing - 只有减号 - 不起作用【英文标题】:Bug: VS2017 Live Unit Testing - only minus's - doesn't work 【发布时间】:2017-11-09 15:48:15 【问题描述】:

TL;DR;编辑 6: 我已经缩小范围并提供了 5 个步骤来重现问题/错误。

    创建VS2017 c# Console App(.Net全框架) 在 Program.cs 中添加一个方法并公开该类:

 

public class Program

    static void Main(string[] args)
    
    

    public int Add(int a, int b)
     
        return a + b;
    


    右键单击Add 方法并选择创建单元测试:

    使用这些设置创建一个带有测试的新单元测试项目:

    添加单元测试

 

[TestMethod()]
public void AddTest()

    Program p = new Program();
    var r = p.Add(1, 2);

    Assert.IsTrue(3 == r);

测试菜单 > 实时单元测试 > 开始 AddTest() 上的上下文菜单 > 实时测试 > 包含

现在将 Add 的 + 符号更改为 -

Live Unit Testing 工作正常,将 - 符号改回 +,Live 测试通过!!

现在添加对 Nuget DLL 的引用(任何人都可以这样做)- Live Unit Testing 不再有效!或者干脆关闭解决方案,重新打开它,Live Unit Testing 不再工作!


我已经设置了一个 MSUnitTest v2 项目并启动了 Live Unit Testing。我正在使用 Web Api 2 .Net 项目(完整框架 v4.5.2)。

我到处都看到减号,但没有记号或十字。

我更改代码的方式与他们在Live Unit Testing in Visual Studio 2017 video 中所做的相同,时钟出现在减号上,但随后什么也没有...

当我调试它时单元测试将通过:

当我将鼠标悬停在蓝色减号上时,消息是“被 0 个测试覆盖”

我发现您需要 MSTest.TestAdapterMSTest.TestFramework 按照我已经完成的https://developercommunity.visualstudio.com/content/problem/5520/live-unit-test-are-only-showing-minuses-using-micr.html 并引用两个 V1.18: p>

Microsoft.VisualStudio.TestPlatform.TestFramework Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions

有很多 beta 测试人员报告了同样的问题:

https://developercommunity.visualstudio.com/content/problem/4510/live-unit-testing-doesnt-do-anything-1.html

https://developercommunity.visualstudio.com/content/problem/2737/live-unit-testing-doesnt-do-anything.html

https://developercommunity.visualstudio.com/content/problem/4376/live-unit-testing-doesnt-work.html

https://developercommunity.visualstudio.com/content/problem/2527/live-unit-testing-doesnt-work-for-projects-that-im.html

所有帖子都已解决或不会修复。

这个*** user got an issue with Live Unit Testing but its a Null Exception 问题。我尝试使用solution in comments 从 Gac 中删除 Microsoft.VisualStudio.QualityTools.UnitTestFramework,当我尝试从 C:\Windows\assembly 卸载时,我被拒绝访问并通过开发人员命令提示符卸载:

GacUtil /u Microsoft.VisualStudio.QualityTools.UnitTestFramework

结果:

程序集:Microsoft.VisualStudio.QualityTools.UnitTestFramework,版本=10.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a,处理器架构=MSIL 无法卸载:一个或多个应用程序需要程序集

有人可以帮我让 Live Unit Testing 工作吗?

编辑 1:

在 VS > 工具 > 选项 > 实时单元测试中,我将日志记录设置为详细。

查看输出我看到一个警告:

[15:48:26.521 Verbose] - TestDriver - TestDiscoverer 日志消息:警告 - 配置系统初始化失败

按照this 中的一些答案,我仍然无法摆脱“配置系统初始化失败” - 不确定这是否是红鲱鱼,这是我发现的唯一线索到目前为止...

编辑 2:

我以管理员身份运行 VS2017 并摆脱了“配置系统无法初始化”。不幸的是,以管理员身份运行并没有什么不同,它仍然无法工作,但不会因任何异常而失败。


这里是详细日志。有趣的是,“准备开始测试发现”看起来像是找到了我包含的 x86 测试。

但是,它显然无法发现测试; “发现 0 个测试”

[16:52:55.110 Verbose] - Aggregator - Calculating the set of tests that cover 1 files  
[16:52:55.110 Verbose] - Aggregator - [Workflow 4] Sending TestRequestEvent with 6 assemblies and 0 tests  
[16:52:55.110 Verbose] - TestDriver - [Workflow 4] Received TestRequestEvent  
[16:52:55.110 Verbose] - TestDriver - [Workflow 4] Preparing to start test discovery (X64: 0, X86: 1).  
[16:52:55.110 Verbose] - TestDriver - [Workflow 4] Start discovering tests from group 0, which contains 1 assemblies.  
[16:52:55.599 Verbose] - TestDriver - [Workflow 4] Finished discovering test from group 0.  
[16:52:55.599 Verbose] - TestDriver - [Workflow 4] Discovered 0 tests from XYZ.API.ClientService\bin\Debug\XYZ.API.ClientService.dll, updating cached data.  
[16:52:55.599 Verbose] - TestDriver - [Workflow 4] Notify Aggregator about completion of test run. (Passed: 0, Failed: 0, Run succeeded: True)  
[16:52:55.599 Verbose] - Aggregator - [Workflow 4] Received TestResponseEvent (TestRunCompleted)  
[16:52:55.599 Verbose] - Aggregator - [Workflow 4] Coverage data for 0 tests was received during this workflow  
[16:52:55.600 Verbose] - BuildManager - Allow to send a single build event.  
[16:52:55.599 Verbose] - Aggregator - Starting coverage aggregation cycle - work list has 3 methods  
[16:52:55.599 Verbose] - Aggregator - Finished coverage aggregation cycle - work list had 3 methods of which 3 methods were defined in 2 open files  
[16:52:55.600 Verbose] - BuildManager - Interrupting build queue -> no new assemblies.  
[16:52:55.600 Verbose] - StatusMargin - Received file coverage result  
[16:52:55.599 Verbose] - Aggregator - Sending FileCoverageResult for 'C:\XYZProjectCollection\XYZ\XYZ.API.ClientService\Repositories\ValueRepository.cs - C:\XYZProjectCollection\Lincoln\XYZ.API.ClientService\XYZ.API.MiscService.csproj'
[16:52:55.599 Verbose] - Aggregator - [Workflow 4] Sending TestRunCompletedEvent  

编辑 3:

我今天查看了 ProcessMonitor 的跟踪记录。没有什么特别突出的,我可能错过了一些东西,但我开始觉得这是一个错误而不是配置问题。

我在一个非常封闭的环境中工作,因此可能是在安装 vs2017 期间某些东西被阻止了。我知道 Unity3D 域没有被列入下载白名单。尽管安装了所有核心 Visual Studio Microsoft 的东西。我开始用尽诊断故障排除策略。非常欢迎任何想法!

编辑 4:

今天早上我决定从 GAC 中删除 Microsoft.VisualStudio.QualityTools.UnitTestFramework DLL。我是按照these instructions to overcome the Access Denied 做的:

这导致找到潜在的根本原因之一。我开始看到 Live Unit Testing Logging 输出:

[09:44:59.053 Verbose] - BuildManager - C:\Program Files x86\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets(3245,5): error MSB3491: Could not write lines to file "C:\XYZProjectCollection\Lincoln\.vs\XYZ.API\18528\i\XYZ.API.MiscService\Debug\CoreCompileInputs.cache". Access to the path 'C:\XYZProjectCollection\Lincoln\.vs\XYZ.API\18528\i\XYZ.API.MiscService\Debug\CoreCompileInputs.cache' is denied.   
[09:44:59.053 Verbose] - BuildManager - C:\Program Files x86\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets(4874,5): error MSB3491: Could not write lines to file "C:\XYZProjectCollection\Lincoln\.vs\XYZ.API\18528\i\XYZ.API.MiscService\Debug\XYZ.API.MiscService.csproj.FileListAbsolute.txt". Access to the path 'C:\XYZProjectCollection\Lincoln\.vs\XYZ.API\18528\i\XYZ.API.MiscService\Debug\XYZ.API.MiscService.csproj.FileListAbsolute.txt' is denied.

我允许自己访问所有这些目录,只是为了排除任何权限问题:

这仍然不起作用,但是我似乎越来越接近实时单元测试需要更长的时间才能工作(即出现在减号顶部的时钟需要更长的时间处理)。

然后我再次尝试 ProcMon,它显示了一些有趣的日志,但没有确凿证据。

这是当前的详细日志:

[10:22:07.363 Info] - BuildManager - Build completed (succeeded).
[10:22:07.363 Verbose] - BuildManager - Interrupting build queue -> switching 'build' and 'test' directories.
[10:22:07.363 Verbose] - BuildManager - New 'test' directory: C:\XYZProjectCollection\Lincoln\.vs\XYZ.API\18528\1\
[10:22:07.363 Verbose] - BuildManager - New 'build' directory: C:\XYZProjectCollection\Lincoln\.vs\XYZ.API\18528\0\
[10:22:07.363 Verbose] - Aggregator - [Workflow 4] Received BuildEvent.
[10:22:07.363 Verbose] - Aggregator - assembly: C:\XYZProjectCollection\Lincoln\.vs\XYZ.API\18528\t\XYZ.API.Tests\bin\Debug\XYZ.API.Tests.dll
[10:22:07.363 Verbose] - Aggregator - assembly: C:\XYZProjectCollection\Lincoln\.vs\XYZ.API\18528\t\XYZ.API.AccountClientService\bin\Debug\XYZ.API.AccountClientService.dll
[10:22:07.363 Verbose] - Aggregator - assembly: C:\XYZProjectCollection\Lincoln\.vs\XYZ.API\18528\t\XYZ.API\bin\XYZ.API.dll
[10:22:07.363 Verbose] - Aggregator - assembly: C:\XYZProjectCollection\Lincoln\.vs\XYZ.API\18528\t\XYZ.API.Helpers\bin\Debug\XYZ.API.Global.dll
[10:22:07.363 Verbose] - Aggregator - assembly: C:\XYZProjectCollection\Lincoln\.vs\XYZ.API\18528\t\XYZ.API.MiscService\bin\Debug\XYZ.API.MiscService.dll
[10:22:07.363 Verbose] - Aggregator - file: 'C:\XYZProjectCollection\Lincoln\XYZ.API.MiscService\Repositories\ValueRepository.cs - C:\XYZProjectCollection\Lincoln\XYZ.API.MiscService\XYZ.API.MiscService.csproj'
[10:22:07.363 Verbose] - Aggregator - Skip reading spans for assembly C:\XYZProjectCollection\Lincoln\.vs\XYZ.API\18528\t\XYZ.API.Tests\bin\Debug\XYZ.API.Tests.dll with MVID c96c0f4b-b21e-47be-a71e-97ebf8a3d493 since we already have this information from a previous build
[10:22:07.363 Verbose] - Aggregator - Skip reading spans for assembly C:\XYZProjectCollection\Lincoln\.vs\XYZ.API\18528\t\XYZ.API.AccountClientService\bin\Debug\XYZ.API.AccountClientService.dll with MVID 6772f896-04ab-4804-bb18-3ed2c7aeb9b9 since we already have this information from a previous build
[10:22:07.363 Verbose] - Aggregator - Skip reading spans for assembly C:\XYZProjectCollection\Lincoln\.vs\XYZ.API\18528\t\XYZ.API\bin\XYZ.API.dll with MVID 9c862440-c16a-4efe-8574-76e8c1453c4d since we already have this information from a previous build
[10:22:07.363 Verbose] - Aggregator - Skip reading spans for assembly C:\XYZProjectCollection\Lincoln\.vs\XYZ.API\18528\t\XYZ.API.Helpers\bin\Debug\XYZ.API.Global.dll with MVID a8899d5d-4730-46bf-b4f2-3c2b1b75b0b1 since we already have this information from a previous build
[10:22:07.363 Verbose] - Aggregator - Removing MVID f337ca44-aae6-42ca-8df5-3776ff962372 for project C:\XYZProjectCollection\Lincoln\XYZ.API.MiscService\XYZ.API.MiscService.csproj from the file span cache
[10:22:07.363 Verbose] - Aggregator - Adding MVID 8e944276-0eec-43f4-aff3-07e40f8611dc for project C:\XYZProjectCollection\Lincoln\XYZ.API.MiscService\XYZ.API.MiscService.csproj to the file span cache
[10:22:07.363 Verbose] - Aggregator - Calculating the set of tests that cover 0 files
[10:22:07.363 Verbose] - Aggregator - Reading spans for assembly C:\XYZProjectCollection\Lincoln\.vs\XYZ.API\18528\t\XYZ.API.MiscService\bin\Debug\XYZ.API.MiscService.dll with MVID 8e944276-0eec-43f4-aff3-07e40f8611dc
[10:22:07.363 Verbose] - Aggregator - Adding 3 methods from 'C:\XYZProjectCollection\Lincoln\XYZ.API.MiscService\Repositories\ValueRepository.cs - C:\XYZProjectCollection\Lincoln\XYZ.API.MiscService\XYZ.API.MiscService.csproj' to the coverage aggregation work list
[10:22:07.363 Verbose] - Aggregator - Calculating the set of tests that cover 1 files
[10:22:07.363 Verbose] - Aggregator - [Workflow 4] Sending TestRequestEvent with 5 assemblies and 0 tests
[10:22:07.363 Verbose] - TestDriver - [Workflow 4] Received TestRequestEvent
[10:22:07.363 Verbose] - TestDriver - [Workflow 4] Preparing to start test discovery (X64: 0, X86: 1).
[10:22:07.363 Verbose] - TestDriver - [Workflow 4] Start discovering tests from group 0, which contains 1 assemblies.
[10:22:07.834 Verbose] - TestDriver - [Workflow 4] Finished discovering test from group 0.
[10:22:07.834 Verbose] - TestDriver - [Workflow 4] Discovered 0 tests from XYZ.API.MiscService\bin\Debug\XYZ.API.MiscService.dll, updating cached data.
[10:22:07.834 Verbose] - TestDriver - [Workflow 4] Notify Aggregator about completion of test run. (Passed: 0, Failed: 0, Run succeeded: True)
[10:22:07.834 Verbose] - Aggregator - [Workflow 4] Received TestResponseEvent (TestRunCompleted)
[10:22:07.834 Verbose] - Aggregator - [Workflow 4] Coverage data for 0 tests was received during this workflow
[10:22:07.834 Verbose] - Aggregator - Starting coverage aggregation cycle - work list has 3 methods
[10:22:07.834 Verbose] - Aggregator - Finished coverage aggregation cycle - work list had 3 methods of which 3 methods were defined in 5 open files
[10:22:07.834 Verbose] - BuildManager - Allow to send a single build event.
[10:22:07.834 Verbose] - BuildManager - Interrupting build queue -> no new assemblies.
[10:22:07.834 Verbose] - Aggregator - Sending FileCoverageResult for 'C:\XYZProjectCollection\Lincoln\XYZ.API.MiscService\Repositories\ValueRepository.cs - C:\XYZProjectCollection\Lincoln\XYZ.API.MiscService\XYZ.API.MiscService.csproj'
[10:22:07.834 Verbose] - Aggregator - [Workflow 4] Sending TestRunCompletedEvent
[10:22:07.850 Verbose] - StatusMargin - Received file coverage result

编辑 5:

根据此博客: https://blogs.msdn.microsoft.com/visualstudio/2017/03/09/live-unit-testing-in-visual-studio-2017-enterprise/

问:为什么我在 Live Test Set 中包含或排除测试后没有任何反应?

答:这是一个已知问题,我们无法在 Visual Studio 2017 版本 15.0 中修复。它现在已在 Visual Studio 2017 版本 15.2 中修复。

原来我有 Visual Studio/15.0.0 +26228.9。升级到 Visual Studio 2017 (v15.2)不能解决问题。

我已将问题报告给https://developercommunity.visualstudio.com,并将随时通知大家。它正确地没有被报告环境被锁定。

【问题讨论】:

实时单元测试是 VS Enterprise 的一部分,不是吗?为什么不记录支持票,我认为您将获得 4 作为您为 MSDN/VS Enterprise 支付的巨额现金的一部分。 是的,我们有自己的技术客户经理,我们是 Premiere 合作伙伴。它已经到了那个地步......由于我的背景,我待的时间更长。 VS2017 漏洞百出,是我所知道的更糟糕的版本。我感到你的沮丧...... 我给了他们 1 票(帮助 -> 发送反馈)。通常我对 Visual Studio 赞不绝口,但这个版本存在明显的质量保证问题。 很好奇,它对任何人都有效吗?为什么 MS 会发布一些不起作用的东西? 【参考方案1】:

更新:MS 说它已在 15.3.2 中修复

https://social.msdn.microsoft.com/Forums/vstudio/en-US/9f5a5c01-052b-4b6a-94c5-70aae9cdf843/vs2017-live-unit-testing-only-minuss?forum=vsunittest


好的,我已经缩小范围了。

当您向单元测试项目添加 NuGet 引用时,它会添加一个 packages.config AND 在某些情况下可能添加一个 App.Config 文件。

当我添加 Oracle.ManagedDataAccess 时,会将以下内容添加到 App.Config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <!--<configSections>
    <section name="oracle.manageddataaccess.client"
      type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
    </configSections>-->
  <system.data>
    <DbProviderFactories>
      <remove invariant="Oracle.ManagedDataAccess.Client"/>
      <add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver"
        type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
    </DbProviderFactories>
  </system.data>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <publisherPolicy apply="no"/>
        <assemblyIdentity name="Oracle.ManagedDataAccess" publicKeyToken="89b483f429c47342" culture="neutral"/>
        <bindingRedirect oldVersion="4.121.0.0 - 4.65535.65535.65535" newVersion="4.122.1.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <oracle.manageddataaccess.client>
    <version number="*">
      <dataSources>
        <dataSource alias="SampleDataSource" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL))) "/>
      </dataSources>
    </version>
  </oracle.manageddataaccess.client>
</configuration>

注意我是如何注释掉 的,纯粹是通过消除过程,我发现它的这个特定的 App.Config 标记会导致 Live Unit测试失败。

【讨论】:

【参考方案2】:

正如其他人所提到的,此功能仍然存在一些问题。我已经相当幸运了,但是只需打开该功能并注意测试资源管理器窗口 - 至少在我的盒子上,它会运行测试,即使代码编辑器的排水沟中有“减号” .但是,我已经看到该功能正常工作。

我会继续使用该功能,并继续以任何方式向 Microsoft 提供反馈(Visual Studio 菜单栏中应该有一个发送反馈按钮)。

更新: 使用现有项目,我在编辑器的排水沟中根本看不到 UI……我安装了 15.3.4 版。我在 Live Unit Tests 和 Rebuild 中包含了一个完整的解决方案...我在输出窗口中收到这条消息:

[11:42:17.584 Info] No supported test adapters are referenced by this solution. If you have a test project, add a NuGet reference to a test adapter corresponding to the test framework used in order to run the tests. If you already have the required NuGet reference in your test project, performing a NuGet restore may resolve the issue.

更新 2: 创建一个新项目作为测试用例,并按照您的步骤包含一个添加 configsections 标记的 NuGet 包,我能够重现该问题。希望这不会增加混乱,但我只有排除的测试/减号问题 configsections 标记被注释掉(并且安装了Oracle 包)。

【讨论】:

这更像是一个评论,我已经通知微软social.msdn.microsoft.com/Forums/vstudio/en-US/… 那时我会将您自己的答案标记为已接受,因为这是一个错误,微软表示已修复。 目前,我在编辑器的阴沟里根本看不到 UI...我安装了 15.3.4 版。我在 Live Unit Tests 和 Rebuild 中包含了一个完整的解决方案...我在输出窗口中收到此消息:[11:42:17.584 Info] No supported test adapters are referenced by this solution. If you have a test project, add a NuGet reference to a test adapter corresponding to the test framework used in order to run the tests. If you already have the required NuGet reference in your test project, performing a NuGet restore may resolve the issue. 您希望我删除我的“答案”吗?我仍然认为这个特定问题是微软必须解决的错误。我能想到的唯一其他选择是使用 NCrunch(付费)或 ContinuousTests(免费和开源)等替代方案。 好的,谢谢,这很有帮助。让我尝试升级,如果失败,我会让 Microsoft 知道它仍然无法正常工作。请在您的答案中包含您的第三条评论。谢谢【参考方案3】:

我认为这个功能很棒,而且效果很好。但不是那么新(参见:http://www.ncrunch.net/)。

它还有一个问题,我刚刚遇到了这个问题。这是非常相似的问题,就像你一样。您是否有多个单元测试项目?如果是,那么您应该检查整个解决方案的 Nuget 包。右键单击解决方案,然后单击“管理解决方案的 Nuget 包...” 检查“合并”选项卡并确保您在以下每个测试项目中安装了相同的版本

MSTest.TestAdapter MSTest.TestFramewor

这是错误设置的屏幕截图,这将导致整个 Live 单元测试功能失败。

将所有项目更新到相同版本后,它应该可以工作。但为了确定:

重启VS 开始实时单元测试之前:转到您的项目文件夹 .vs\\lut,您可以删除整个 LUT(实时单元测试)文件夹。它可能包含无效的缓存数据。

希望对你有帮助。

【讨论】:

我经历过类似的事情,但这不是 Live Unit Testing 的问题,我在这里详细说明了修复:***.com/a/44793868/495455,哈哈经典我的答案几乎是与您的解决方案相同:***.com/a/44567429/495455【参考方案4】:

我在使用 v15.5.6 时遇到了同样的问题。我发现解决方案是去 工具 |实时单元测试 |删除持久数据。

【讨论】:

【参考方案5】:

我相信您已经发现了问题,但在我的情况下,它有助于简单地安装 Microsoft.NET.Test.Sdk。确保将其添加到您的测试项目中。我花了几天时间试图解决这个问题,就这么简单。

【讨论】:

【参考方案6】:

我在使用包含类库项目和测试项目的简单解决方案时遇到了同样的问题。显然我的测试项目被排除在 Live Unit Testing 之外。包含项目后(右键单击项目> Live Unit Testing > Include)图标正常工作。虽然这为我解决了这个问题,但我真的不清楚在我的测试类中的每一行代码上都有实时测试图标的价值是什么。

【讨论】:

【参考方案7】:

我遇到了这个确切的问题,并且能够通过更新到 Visual Studio 15.7.3 并选择“测试”>“实时单元测试”>“选项”来解决这个问题 - 然后运行“删除持久数据”。

【讨论】:

以上是关于错误:VS2017 Live Unit Testing - 只有减号 - 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Live Unit Testing

VS2017不能生成Database Unit Test项目

VS2017下Live555的编译

Windows7上用VS编译本地使用的live555

Kotlin - Void vs. Unit vs. Nothing

Bootstrap - 下拉菜单不再在线工作,但在 VS Code Live Server 中完美运行