Test Edition 疑难解答

更新:2007 年 11 月

在测试代码时,某些情形可能产生错误或警告,甚至导致测试失败。本主题介绍了一些这样的情形以及消除它们的步骤。

测试执行疑难解答

阻止测试运行的情形通常是由于未能部署测试文件或测试运行所需的其他文件而导致的。

  • 远程测试。对于远程测试而言,阻止测试运行的情形也可能是由于与远程计算机的通信问题而导致的。测试执行疑难解答中介绍了测试级别和运行级别上的这些错误和其他错误。

  • ASP.NET 单元测试。如果 ASP.NET 单元测试在 IIS 进程中运行,为安全起见,您可以选择让 ASP.NET 进程以“非默认用户”身份运行,即以另一进程标识运行。在这种情况下,测试执行很可能会失败。有关更多信息,请参见 ASP.NET 单元测试概述

  • 部署文件和测试。部署错误通常显示在“测试运行详细信息”页上,而不是显示在失败的单个测试的“测试结果详细信息”页上。因此,具体到某个测试失败的原因可能不是很明显。有关更多信息,请参见测试部署概述中的“测试部署疑难解答”部分。

  • Web 测试疑难解答。在运行 Web 测试时,可能会发生各种错误。缺少数据绑定属性、安全设置有问题或尝试访问防火墙之外的网站都可能会导致错误。有关更多信息,请参见 Web 测试疑难解答

  • 负载测试疑难解答。在运行负载测试时,可能会发生各种错误。负载测试数据库、负载测试的计数器集、错误配置的远程测试机组 (Rig) 或负载测试中包含的某个测试存在问题都可能会导致错误。有关更多信息,请参见负载测试疑难解答

  • 数据驱动的单元测试的疑难解答。在运行数据驱动的单元测试时,您可能会遇到连接、身份验证、部署问题或其他问题。请使用数据驱动的单元测试的疑难解答中的信息来解决这些问题。

重新签名具有强名称的程序集

在运行单元测试时,您测试的是二进制文件中的代码。当这些测试通过“检测”该二进制文件来运行时,您可以收集代码覆盖率信息;请参见如何:获取代码覆盖率数据。检测过程会将生成代码覆盖率信息的代码添加到二进制文件中。

如果所测试的二进制文件是具有强名称的程序集,则检测所导致的代码修改将使该程序集的签名无效。因此,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 操作会导致重新生成该程序的二进制文件。这样会覆盖检测后的二进制文件,也就是说将不会收集到任何代码覆盖率数据。

有关收集代码覆盖率数据的一般信息,请参见如何:获取代码覆盖率数据

添加测试方法时的性能问题

添加新测试方法时,将执行后台处理以将该测试方法添加到“测试视图”窗口和“测试列表编辑器”中。因此,您可以立即看到此测试方法。如果单个测试类或整个项目中包括很多测试方法,则向此测试类中添加新测试方法时,您可能会遇到由于该自动处理而导致的性能问题。

如果遇到这种性能问题,有三种可能的解决方案:

  • 可以将测试类拆分为分部类并在这些分部类之间划分测试方法。这样做可以减少单个测试类中方法的数目,从而提高添加测试方法的性能。

  • 可以创建新测试项目,将一些测试类移动到这个新的测试项目中,然后从原始测试项目中移除这些测试类。这样做可以减少一个程序集中测试方法的数目,从而提高性能。

  • 可以选择关闭向“测试视图”窗口和“测试列表编辑器”中添加测试方法的后台处理,从而可以提高添加测试方法的性能。但如果设置了此选项,在“测试视图”窗口或“测试列表编辑器”中就无法看到添加的测试方法,必须编译包含此测试方法的类,然后单击“测试视图”窗口或“测试列表编辑器”中的“刷新”才能看到它。

    说明:

    如果设置此选项,则将在编译时发现新测试方法。这会使编译解决方案的总时间增加。

禁用自动发现测试方法的功能

  1. 在“工具”菜单上单击“选项”。

    将显示“选项”对话框。

  2. 在左窗格中展开“测试工具”,然后单击“测试项目”。

  3. 若要禁用自动发现测试方法的功能,请选择“禁用后台发现测试方法”[Disable Background Discovery of Test Methods]。

    说明:

    设置此选项后,添加到任意测试类的任意测试方法均不会在“测试视图”窗口或“测试列表编辑器”中显示,只有在编译了包含该测试方法的类之后才会显示。

请参见

任务

如何:合并代码覆盖率数据

Web 测试疑难解答

负载测试疑难解答

概念

测试部署概述

使用合并的代码覆盖率数据

数据驱动的单元测试的疑难解答

ASP.NET 单元测试概述