我们有一个Windows客户端,我们的QA团队为它编写了编码的UI测试。我正在尝试让OpenCover工作,这样我们就可以看到他们的测试真正击中了多少应用程序。他们使用 MSTest 框架之上的自定义框架编写测试。
他们的框架使用 ApplicationUnderTest.Launch 以不同用户身份启动应用程序以测试安全设置。我可以捕获测试 dll 的覆盖范围,但它本身的应用程序。
我强制应用程序以 32 位构建,确保文件夹中存在所有 pdb,并将 pdb 目录包含在目标目录中。
还有其他人看到这个问题吗?我还尝试用包装器 exe 替换我的批处理文件,并得到了覆盖,但不是主应用程序。一切都以用户身份运行,他们正在启动应用程序,同时也是计算机上的管理员。
我正在运行的命令是:C:\Users\kkindt.CORP\AppData\Local\Apps\OpenCover\OpenCover.Console.exe -register "-target:C:\Program Files (x86(\Microsoft Visual Studio 12.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe" -output:C:\CodeCoverage\CollectionResults\CodedUICover.xml "-targetargs:C:\CodeCoverage\Tests\EllisWinAppTest.dll/Platform:x86/Framework:framework40/Tests:LaunchEllisTest">
我强烈怀疑这是由于您如何启动被测应用程序
OpenCover 是一个 .NET 探查器,要启动附加探查器的 .NET 应用程序,需要一些环境变量可用于新进程。我怀疑ApplicationUnderTest.Launch
不会传播所有当前环境变量,因此探查器不会启动,因此不会报告覆盖范围。
要使其正常工作,您应该研究使用使用ProcessStartInfo的ApplicationUnderTest.Launch重载,然后您需要传播以下环境变量
- Cor_Profiler
- Cor_Enable_Profiling
- OpenCover_Profiler_Key
- OpenCover_Profiler_Namespace
- OpenCover_Profiler_Threshold
- OpenCover_Profiler_TraceByTest(如果有(
运行时需要Cor_*
才能启动探查器,OpenCover_*
条目是允许探查器和主机相互查找 - github 上提供了这些环境变量的列表