有关 Visual Studio ALM 测试工具的疑难解答
在测试代码时,某些情形可能产生错误或警告,甚至导致测试失败。 本主题介绍了一些这样的情形以及消除它们的步骤。
测试执行疑难解答
阻止测试运行的情形通常是由于未能部署测试文件或测试运行所需的其他文件而导致的。
远程测试。 对于远程测试而言,阻止测试运行的情形也可能是由于与远程计算机的通信问题而导致的。 测试执行疑难解答中介绍了测试级别和运行级别上的这些错误和其他错误。
ASP.NET 单元测试。 如果 ASP.NET 单元测试在 IIS 进程中运行,为安全起见,您可以选择让 ASP.NET 进程以“非默认用户”身份运行,即以另一进程标识运行。 在这种情况下,测试执行很可能会失败。
Web 测试疑难解答。 在运行 Web 测试时,可能会发生各种错误。 缺少数据绑定特性、安全设置有问题或尝试访问防火墙之外的网站都可能会导致错误。 有关更多信息,请参见 Web 性能测试疑难解答。
负载测试疑难解答。 在运行负载测试时,可能会发生各种错误。 负载测试数据库、负载测试的计数器集、错误配置的测试代理和控制器或负载测试中包含的某个测试存在问题都可能会导致错误。 有关更多信息,请参见负载测试疑难解答。
重新签名具有强名称的程序集
在运行单元测试时,您测试的是二进制文件中的代码。 当这些测试通过“检测”该二进制文件来运行时,您可以收集代码覆盖率信息;请参见如何:获取代码覆盖率数据。 检测过程会将生成代码覆盖率信息的代码添加到二进制文件中。
如果所测试的二进制文件是具有强名称的程序集,则检测所导致的代码修改将使该程序集的签名无效。 因此,Visual Studio 会在检测步骤完成之后立即自动尝试重新签名程序集。 有关具有强名称的程序集的更多信息,请参见具有强名称的程序集。
有很多情形都可能会导致此重新签名失败。 有关如何消除这些情形的信息,请参见对程序集进行检测和重新签名。
代码覆盖率数据和 VSPerfMon.exe
如果在运行 VSPerfMon.exe 的同时运行收集代码覆盖率数据的测试,则会发生以下事件:
如果在采用 TRACE 或 SAMPLE 选项的情况下运行 VSPerfMon,则同时运行的测试运行将会失败,并且“测试运行详细信息”页中会报告错误。
如果在采用 COVERAGE 选项的情况下运行 VSPerfMon.exe ,则 VSPerfMon.exe 进程将停止。
这两种情况的解决方法都是避免在运行 VSPerfMon.exe 的同时运行收集代码覆盖率数据的测试。 有关 VSPerfMon.exe 工具的更多信息,请参见 VSPerfMon。
何时会发生这种情况 ?
VSPerfMon 运行时最常见的情况如下:
在其中启动分析会话的 Visual Studio 实例可能不是在其中运行测试的实例。
通过直接运行 VSPerfMon.exe 或使用包装 VSPerfCmd.exe(后一种情况更为常见)来收集代码覆盖率数据或分析数据。
代码覆盖率数据未正确显示
如果您已请求为测试收集代码覆盖率数据,但并没有显示此类数据或者显示的数据与您所期望的不同,则可能存在下面所描述的情况之一:
**未显示任何代码覆盖率数据。**在测试执行过程中,某些二进制文件(如 COM DLL)是从其原始位置加载的,而不是从测试部署目录加载的。 这样的二进制文件必须就地检测;否则,即便测试执行成功且没有生成任何运行级别的警告,也不会收集代码覆盖率数据。 有关更多信息,请参见选择检测文件夹。
代码覆盖率的突出显示效果未出现。 在运行测试、收集代码覆盖率数据然后查看测试结果时,Visual Studio 通过突出显示其源代码文件中的代码来指示在测试运行中测试的代码。 可以选择通过颜色来指示已覆盖的代码、未覆盖的代码和部分覆盖的代码。 如果某些或所有这种突出显示都未出现,请确保选定的颜色与源代码文件的背景颜色不同。 有关选择突出显示颜色的更多信息,请参见如何:获取代码覆盖率数据中的“更改代码覆盖率数据的显示”部分。
**代码覆盖率数据未正确合并。**您可以合并包含一个或多个 ASP.NET 测试运行的结果,但“代码覆盖率结果”窗口会在“合并的结果”下的不同节点中显示 ASP.NET 数据,而不是在一个合并的节点中显示这些数据。
**并未显示所有合并的代码覆盖率数据。**合并代码覆盖率数据后,可以将这些数据以 XML 文件的形式导出到磁盘中。 如果重新导入此文件并将它与其他数据合并,则不是所有的统计信息都会显示。
代码覆盖率数据未导入。 Visual Studio 必须能够定位磁盘上的某些文件以导入代码覆盖率数据。
检测后的二进制文件被覆盖。 您尝试从手动测试期间运行的程序中收集代码覆盖率数据。 如果使用 Ctrl+F5 来启动该程序,则 Ctrl+F5 操作会导致重新生成该程序的二进制文件。 这样会覆盖检测后的二进制文件,也就是说将不会收集到任何代码覆盖率数据。
有关收集代码覆盖率数据的一般信息,请参见如何:获取代码覆盖率数据。