visual-studio - VS2008 : Unit Testing with Code Coverage doesn't work with/CLR

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

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

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

Empty results generated: none of the instrumented binary was used. Look at test run details for any instrumentation problems.

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

令人恼火的是,我找不到任何地方专门说明代码覆盖率是否适用于/CLR,所以我只好自己尝试一下。

如果它应该工作,任何人都可以看到我在这里做错了什么吗?


[文件]->[新建]->[项目]
选择Class Library,输入MyProj作为项目名称,点击OK

右击MyProj项目,选择[属性]
选择【配置属性】->【通用】
确保“公共(public)语言运行时支持”设置为 /CLR

将此代码添加到 Class1:

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

构建解决方案

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

将此代码添加到TestMethod1:

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

右键单击 TestProject1 项目,选择 [References]
点击“添加新引用”
在“项目”选项卡中选择MyProj,单击“确定”,再次单击“确定”

[测试]->[编辑测试运行配置]->[本地测试运行]
选择【代码覆盖率】
选中MyProj.dll,点击应用,点击关闭

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

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

Empty results generated: none of the instrumented binary was used. Look at test run details for any instrumentation problems.


右击MyProj项目,选择[属性]
选择【配置属性】->【通用】
将“Common Language Runtime support”更改为/CLR:SAFE/CLR:PURE,点击OK

构建解决方案

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

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

最佳答案

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

1-项目必须处于调试状态

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

3 在GAC中注销正在测试的项目。

关于visual-studio - VS2008 : Unit Testing with Code Coverage doesn't work with/CLR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/700736/

相关文章:

c# - 微软视觉 C# : Eclipse-style autocomplete for interface methods

用于小型项目的 VB.NET 测试框架?

vb.net - vb.net中的表单的自定义构造函数: Best practices

vb.net - Visual Basic 编译器无法从以下错误中恢复 : System Error &Hc0000005& (Visual Basic internal compiler error)

c# - 所有 C# 强制转换都会导致装箱/拆箱

c# - 调用以 std::list 作为参数的 C++ 函数

ASP.NET: 无法加载类型

c# - 我们可以用 C# 为 MS-Word 编写宏吗

visual-studio-2008 - VS2008 中的解决方案文件夹不按字母顺序排列

.net - .Core CLR 与 Mono CLR 有什么区别?那么微软为什么要维护运行时环境呢?