VS2008:使用代码覆盖率进行单元测试不适用于/ CLR

时间:2009-03-31 12:42:43

标签: visual-studio visual-studio-2008 clr c++-cli code-coverage

我正在尝试使用VS2008中的代码覆盖率设置单元测试,对于使用 / clr 编译的C ++ / CLI DLL(不是/ clr:safe或/ clr:pure - it必须是/ clr,因为它使用MFC)。

单元测试工作完美,但覆盖信息仅在我用/ clr:safe或/ clr:pure编译时​​才有效。对于/ clr,代码覆盖率结果窗口显示以下消息:

  

生成空结果:没有   使用了仪器化二进制文件。看着   测试运行详细信息   仪表问题。

我也试过“going offroad”但是当我将覆盖文件加载到VS时,它也包含空结果。

令人讨厌的是,我无法找到任何具体说明Code Coverage是否与/ CLR一起使用的内容,所以我必须自己尝试一下。

如果它应该有用,谁能看到我在这里做错了什么?


[文件] - > [新] - > [项目]
选择类库,输入 MyProj 作为项目名称,单击OK

右键单击MyProj项目,选择[属性]
选择[配置属性] - > [常规]
确保“公共语言运行时支持”设置为 / CLR

将此代码添加到 Class1

public:
    static int calc() { return 69; }

构建解决方案

[测试] - > [新测试] - > [单元测试],单击确定,单击创建

将此代码添加到 TestMethod1

Assert::AreEqual(MyProj::Class1::calc(), 69);

右键单击TestProject1项目,选择[参考文献]
点击“添加新参考”
在“项目”选项卡中选择 MyProj ,单击“确定”,再次单击“确定”

[测试] - > [编辑测试运行配置] - > [本地测试运行]
选择[代码覆盖率]
检查 MyProj.dll ,单击“应用”,然后单击“关闭”

[测试] - > [运行] - > [解决方案中的所有测试]

测试结果窗口显示TestMethod1已通过 代码覆盖率结果窗口显示以下消息:

  

生成空结果:没有   使用了仪器化二进制文件。看着   测试运行详细信息   仪表问题。


右键单击MyProj项目,选择[属性]
选择[配置属性] - > [常规]
将“公共语言运行时支持”更改为 / CLR:SAFE / CLR:PURE ,单击“确定”

构建解决方案

[测试] - > [运行] - > [解决方案中的所有测试]

测试结果窗口显示TestMethod1已通过 代码覆盖率结果窗口现在显示正确的覆盖率信息。

2 个答案:

答案 0 :(得分:0)

基于http://msdn.microsoft.com/en-us/library/ms182534.aspx

1项目必须在调试中

2.-在项目属性中,您必须选择x 86平台。

3取消注册GAC中正在测试的项目。

答案 1 :(得分:0)

是的,我认为这一切都必须在CLR中:安全项目才能运作。我不完全明白为什么,但我和你在同一条船上。