【发布时间】:2010-10-16 14:09:21
【问题描述】:
我正在尝试在 VS2008 中为使用 /clr 编译的 C++/CLI DLL(不是 /clr:safe 或 /clr:pure - 它必须是 /clr,因为它使用 MFC)。
单元测试运行良好,但覆盖信息仅在我使用 /clr:safe 或 /clr:pure 编译时才有效。对于 /clr,代码覆盖率结果 窗口显示以下消息:
生成的空结果:没有 使用了检测二进制文件。看着 任何测试运行的详细信息 仪表问题。
我也尝试过“going offroad”,但是当我将覆盖文件加载到 VS 时,它也包含空结果。
令人讨厌的是,我找不到任何地方明确说明 Code Coverage 是否适用于 /CLR,所以我只好自己尝试了。
如果它应该工作,谁能看到我在这里做错了什么?
[文件]->[新建]->[项目]
选择Class Library,输入MyProj作为项目名称,点击OK
右键单击 MyProj 项目,选择 [属性]
选择[配置属性]->[常规]
确保“公共语言运行时支持”设置为 /CLR
将此代码添加到Class1:
public:
static int calc() { return 69; }
构建解决方案
【测试】->【新建测试】->【单元测试】,点击确定,点击创建
将此代码添加到TestMethod1:
Assert::AreEqual(MyProj::Class1::calc(), 69);
右击TestProject1项目,选择[References]
单击“添加新参考”
在“Projects”选项卡中选择MyProj,点击OK,再次点击OK
[测试]->[编辑测试运行配置]->[本地测试运行]
选择[代码覆盖率]
检查MyProj.dll,点击Apply,点击Close
[测试]->[运行]->[解决方案中的所有测试]
测试结果窗口显示 TestMethod1 已通过。
代码覆盖率结果窗口显示以下消息:
生成的空结果:没有 使用了检测二进制文件。看着 任何测试运行的详细信息 仪表问题。
右键单击 MyProj 项目,选择 [属性]
选择[配置属性]->[常规]
将“Common Language Runtime support”改为/CLR:SAFE或/CLR:PURE,点击OK
构建解决方案
[测试]->[运行]->[解决方案中的所有测试]
测试结果窗口显示 TestMethod1 已通过。
代码覆盖率结果窗口现在显示正确的覆盖率信息。
【问题讨论】:
-
发现于social.msdn.microsoft.com/Forums/en-US/vststest/thread/… - “代码覆盖引擎可以检测和收集托管代码和本机代码。”所以它似乎应该工作......
标签: visual-studio visual-studio-2008 clr c++-cli code-coverage