一般测试疑难解答

更新:2007 年 11 月

在运行一般测试时,可能会遇到以下错误:在 64 位平台上运行一般测试时,无法收集代码覆盖率数据。若要解决此错误,请参见下一部分避开 32 位限制中的信息。

避开 32 位限制

代码覆盖率检测仅在 32 位模式下有效,在 64 位模式下无效。这是由于在针对程序集检测了代码覆盖率数据之后,程序集只能在 32 位模式下加载。

说明:

如果您未在收集代码覆盖率数据,那么,当您在 64 位计算机上运行单元测试时,就不会应用这样的限制。这是由于 VSTestHost.exe(用来加载类库的测试引擎)是在 32 位进程中运行的。

对于一般测试,包装应用程序是针对“Any CPU”构建的,它在 64 位计算机上作为 64 位进程执行。当该 64 位进程尝试加载 32 位程序集时,会出现错误。此问题可通过下列方法之一来解决。

如果您的一般测试直接包装成品代码已经编译到的二进制文件,请使用下面的方法:

  • 将解决方案配置更改为 x86

如果在一般测试和成品代码二进制文件之间有一层,请使用以下两种方法之一。即,一般测试将中间应用程序作为测试工具来包装。此测试工具接下来运行所测试的成品代码。

  • 检测用来加载成品代码二进制文件的应用程序

  • 更改用来加载成品代码二进制文件的应用程序的生成设置

将解决方案配置更改为 x86

将解决方案配置从“Any CPU”更改为“x86”。

更改解决方案配置

  1. 右击该解决方案,再单击“属性”。

    将显示“解决方案属性页”对话框。

  2. 在“配置属性”下面单击“配置”。

  3. 单击“配置管理器”。

    将显示“配置管理器”对话框。

  4. 在“活动解决方案平台”下面单击“新建”。

    将出现“新建解决方案平台”对话框。

  5. 在“键入或选择新平台”下面单击“x86”。

  6. 在“新建解决方案平台”对话框中单击“确定”。

  7. 在询问是否要保存所做更改的对话框中,单击“是”。

  8. 在“配置管理器”对话框上的“活动解决方案平台”下面,确保“x86”处于选中状态,再单击“关闭”。

  9. 在“解决方案属性页”对话框中单击“确定”。

检测用来加载成品代码二进制文件的应用程序

使用此过程可检测一般测试所包装的中间应用程序或测试工具。该中间应用程序将运行要测试的代码,这会强制该应用程序在 32 位模式下运行。

说明:

只有当符号文件可用于要检测的文件时,此过程才适用。

指定要检测的可执行文件

  1. 在 Visual Studio 中,打开包含一般测试的测试项目。

  2. 在解决方案资源管理器中,打开“解决方案项”文件夹。

  3. 在“解决方案项”文件夹中,双击 .testrunconfig 文件。

  4. 将显示“测试运行配置”对话框。

  5. 单击“代码覆盖率”。

  6. 在“选择要检测的项目”下面,选择运行成品代码二进制文件的中间应用程序。

    说明:

    如果该中间应用程序的二进制文件没有显示在“选择要检测的项目”下面,请单击“添加程序集”. 在“选择要检测的程序集”对话框中,指定该文件,再单击“打开”。

  7. 单击“应用”,再单击“关闭”。

更改用来加载成品代码二进制文件的应用程序的生成设置

使用此过程可检测一般测试所包装的任何中间应用程序或测试工具。该中间应用程序将运行要测试的代码,

在该过程中,将更改该中间应用程序的设置,使其针对 x86 平台生成。

说明:

只有当所包装的应用程序是从解决方案中的项目生成时,才能这样做。

更改所包装应用程序的生成设置

  1. 在解决方案资源管理器中,右击从中生成该中间应用程序的项目,再单击“属性”。

    这将显示该项目的属性页。

  2. 单击“生成”选项卡。

  3. 对于“目标平台”,请指定“x86”。

  4. 在“文件”菜单上单击“保存选定项”。

请参见

任务

如何:通过一般测试收集代码覆盖率数据