一般测试疑难解答
更新:2007 年 11 月
在运行一般测试时,可能会遇到以下错误:在 64 位平台上运行一般测试时,无法收集代码覆盖率数据。若要解决此错误,请参见下一部分避开 32 位限制中的信息。
避开 32 位限制
代码覆盖率检测仅在 32 位模式下有效,在 64 位模式下无效。这是由于在针对程序集检测了代码覆盖率数据之后,程序集只能在 32 位模式下加载。
说明: |
---|
如果您未在收集代码覆盖率数据,那么,当您在 64 位计算机上运行单元测试时,就不会应用这样的限制。这是由于 VSTestHost.exe(用来加载类库的测试引擎)是在 32 位进程中运行的。 |
对于一般测试,包装应用程序是针对“Any CPU”构建的,它在 64 位计算机上作为 64 位进程执行。当该 64 位进程尝试加载 32 位程序集时,会出现错误。此问题可通过下列方法之一来解决。
如果您的一般测试直接包装成品代码已经编译到的二进制文件,请使用下面的方法:
- 将解决方案配置更改为 x86
如果在一般测试和成品代码二进制文件之间有一层,请使用以下两种方法之一。即,一般测试将中间应用程序作为测试工具来包装。此测试工具接下来运行所测试的成品代码。
检测用来加载成品代码二进制文件的应用程序
更改用来加载成品代码二进制文件的应用程序的生成设置
将解决方案配置更改为 x86
将解决方案配置从“Any CPU”更改为“x86”。
更改解决方案配置
右击该解决方案,再单击“属性”。
将显示“解决方案属性页”对话框。
在“配置属性”下面单击“配置”。
单击“配置管理器”。
将显示“配置管理器”对话框。
在“活动解决方案平台”下面单击“新建”。
将出现“新建解决方案平台”对话框。
在“键入或选择新平台”下面单击“x86”。
在“新建解决方案平台”对话框中单击“确定”。
在询问是否要保存所做更改的对话框中,单击“是”。
在“配置管理器”对话框上的“活动解决方案平台”下面,确保“x86”处于选中状态,再单击“关闭”。
在“解决方案属性页”对话框中单击“确定”。
检测用来加载成品代码二进制文件的应用程序
使用此过程可检测一般测试所包装的中间应用程序或测试工具。该中间应用程序将运行要测试的代码,这会强制该应用程序在 32 位模式下运行。
说明: |
---|
只有当符号文件可用于要检测的文件时,此过程才适用。 |
指定要检测的可执行文件
在 Visual Studio 中,打开包含一般测试的测试项目。
在解决方案资源管理器中,打开“解决方案项”文件夹。
在“解决方案项”文件夹中,双击 .testrunconfig 文件。
将显示“测试运行配置”对话框。
单击“代码覆盖率”。
在“选择要检测的项目”下面,选择运行成品代码二进制文件的中间应用程序。
说明: 如果该中间应用程序的二进制文件没有显示在“选择要检测的项目”下面,请单击“添加程序集”. 在“选择要检测的程序集”对话框中,指定该文件,再单击“打开”。
单击“应用”,再单击“关闭”。
更改用来加载成品代码二进制文件的应用程序的生成设置
使用此过程可检测一般测试所包装的任何中间应用程序或测试工具。该中间应用程序将运行要测试的代码,
在该过程中,将更改该中间应用程序的设置,使其针对 x86 平台生成。
说明: |
---|
只有当所包装的应用程序是从解决方案中的项目生成时,才能这样做。 |
更改所包装应用程序的生成设置
在解决方案资源管理器中,右击从中生成该中间应用程序的项目,再单击“属性”。
这将显示该项目的属性页。
单击“生成”选项卡。
对于“目标平台”,请指定“x86”。
在“文件”菜单上单击“保存选定项”。