我正在尝试使用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已通过 代码覆盖率结果窗口现在显示正确的覆盖率信息。
答案 0 :(得分:0)
基于http://msdn.microsoft.com/en-us/library/ms182534.aspx
1项目必须在调试中
2.-在项目属性中,您必须选择x 86平台。
3取消注册GAC中正在测试的项目。
答案 1 :(得分:0)
是的,我认为这一切都必须在CLR中:安全项目才能运作。我不完全明白为什么,但我和你在同一条船上。