【问题标题】:VS2008: Unit Testing with Code Coverage doesn't work with /CLRVS2008:具有代码覆盖率的单元测试不适用于 /CLR
【发布时间】: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 已通过。
代码覆盖率结果窗口现在显示正确的覆盖率信息。

【问题讨论】:

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


【解决方案1】:

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

1-项目必须在调试中

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-18
      • 2010-10-26
      • 2010-10-14
      • 2023-04-07
      • 1970-01-01
      相关资源
      最近更新 更多