3

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

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

生成空结果:未使用任何已检测的二进制文件。查看任何仪器问题的测试运行详细信息。

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

恼人的是,我找不到任何具体说明代码覆盖率是否与 /CLR 一起使用的地方,所以我只好自己尝试一下。

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


[File]->[New]->[Project]
选择Class Library,输入MyProj作为项目名称,点击 OK

右键单击 MyProj 项目,选择 [Properties]
选择 [Configuration Properties]->[General]
确保“Common Language Runtime support”设置为/CLR

将此代码添加到Class1

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

构建解决方案

【测试】->【新建测试】->【单元测试】,点击确定,点击创建

将此代码添加到TestMethod1

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

右击TestProject1项目,选择【References】
点击“Add New Reference”在“Projects”选项卡中
选择MyProj,点击OK,再次点击OK

[Test]->[Edit Test Run Configuration]->[Local Test Run]
选择[Code Coverage]
Check MyProj.dll,点击Apply,点击Close

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

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

生成空结果:未使用任何已检测的二进制文件。查看任何仪器问题的测试运行详细信息。


右键单击 MyProj 项目,选择 [Properties]
选择 [Configuration Properties]->[General] 将
“Common Language Runtime support”更改为/CLR:SAFE/CLR:PURE,单击 OK

构建解决方案

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

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

4

2 回答 2

0

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

于 2011-01-24T04:09:18.630 回答
0

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

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

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

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

于 2010-02-27T15:05:20.397 回答