在使用Fakes对代码进行代码覆盖率分析时,在TFS构建过程中失败。

10 浏览
0 Comments

在使用Fakes对代码进行代码覆盖率分析时,在TFS构建过程中失败。

我在启用TFS构建期间遇到了一些问题。测试解决方案包含三个测试项目,共209个测试中有三个测试失败(一个在一个项目中,另外两个在另一个项目中),错误信息如下:

测试方法MyNamespace.MyTest抛出异常:
Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationException:在分析器库“C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\IntelliTrace\14.0.0\Microsoft.IntelliTrace.Profiler.14.0.0.dll”中SetDetourProvider返回意外错误。
Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.IntelliTraceInstrumentationProvider.Initialize()
Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationRuntime.InitializeUnitTestIsolationInstrumentationProvider()
Microsoft.QualityTools.Testing.Fakes.Shims.ShimRuntime.CreateContext()
Microsoft.QualityTools.Testing.Fakes.ShimsContext.Create()
MyNamespace.MyTest() in MyFile.cs: line 224

堆栈跟踪表明与Shims的使用有关。即使在运行Code Coverage并禁用构建期间的Code Coverage时,所有测试也能通过本地运行。

这个问题似乎与Microsoft Fakes generates UnitTestIsolationException略有关联,但构建服务器上未安装Resharper。

我尝试过的方法

  1. 不同的构建类型:Build vNext,具有自定义或默认模板的XAML Build
  2. 使用/p:EnableIntelliTrace=true和.runsetting显式禁用IntelliTrace
  3. 在所有.fakes文件中添加Diagnostic="true"
  4. 增加日志详细程度以获取更多错误信息
  5. 通过命令行在服务器上本地运行测试

我的构建服务器配置

  • Windows Server 2012 R2
  • Team Foundation Server 2015.3
  • Visual Studio Enterprise 2015.3
0
0 Comments

在使用Fakes进行TFS构建过程中,当对代码进行覆盖率分析时出现了失败的情况。出现这个问题的原因是在执行测试时遇到了相同的错误信息。当从命令行执行时,vstest.console.exe运行得非常顺利,但是当从Bamboo构建任务运行时,却出现了上述错误信息。

最终问题的根源是运行该任务的用户——构建服务器使用了SYSTEM用户。当我以普通特权用户身份运行任务时,它成功了。

解决方法是将构建任务以普通特权用户身份运行。

0
0 Comments

从上述内容中可以得出以下结论:

问题的原因是使用Fakes时,如果测试设置中启用了Intellitrace,则会出现UnitTestIsolationException异常。

解决方法是禁用Intellitrace,可以通过在MSBuild Arguments中添加"/p:EnableIntelliTrace=true"来实现。

根据反馈,这个问题似乎不仅仅与使用Intellitrace有关,因为有许多使用Fakes的测试在启用了代码覆盖率的情况下正常运行。

此外,根据错误消息指向的路径,可以检查相关文件是否存在,以确保没有缺少的文件。

最后,需要注意测试是在发布模式下运行的。

0