我正在尝试在 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 已通过。代码覆盖率结果
窗口现在显示正确的覆盖率信息。