【问题标题】:Code coverage tool visual studio 2010 c++代码覆盖工具visual studio 2010 c++
【发布时间】:2011-01-20 05:59:36
【问题描述】:

有没有人知道如何在 c++ 中使用 Visual Studio 2010 中的代码覆盖率结果进行一些单元测试,我到处都在寻找一些答案。我想将我正在测试的项目和测试项目分开。使用项目输出静态库不是解决方案,因为 VS 2010 中的代码覆盖工具无法将检测代码放入库中。我已经尝试将 dll 作为要测试的项目,但是由于 CLR:safe 参数被打开以进行测试,因此无法正确链接到创建的测试。任何想法的人?还是 MS 只是无法制作 c++ 代码覆盖工具。

【问题讨论】:

    标签: unit-testing visual-studio-2010 code-coverage


    【解决方案1】:

    (完全披露:我在维护此功能的团队中)

    VS2010 支持原生 C++ 代码覆盖,但正如您所见,您只能检测链接的二进制文件(例如 .dll 或 .exe)。这意味着您要为其收集覆盖率的代码必须在检测之前链接到二进制图像中。

    您使用的是什么单元测试框架?听起来您的测试项目是纯托管 C++ (/clr:safe)。如果您将本机 C++ 项目构建为 DLL,那么您的测试项目至少应该能够使用 P/Invoke 调用调用本机 DLL。通过这样做,您实际上不需要将本机 .lib 链接到您的测试项目中。

    【讨论】:

    • 目前我们正在使用 Microsoft 单元测试框架:(Microsoft::VisualStudio::TestTools::UnitTesting),它默认在 /clr:safe 中。我仍然不确定如何将测试文件链接到我的 dll,在下一篇文章中我将向您展示我的测试文件。把你的邮箱发给我,我会把我正在玩的项目发给我(非常基本的程序,而且非常小),你可以自己看看它不起作用。
    • "VS2010 支持原生 C++ 代码覆盖率"
    • @user531571:StackOverflow 鼓励人们将事情公开,这样我们就可以互相学习。您可以编辑您的问题并发布代码吗?我很乐意修改我的答案并提供进一步帮助。
    • @Billy:是的,确实如此,但遗憾的是它并没有很好地暴露出来,因为没有真正与代码覆盖密切相关的本地代码内置测试框架。但是,如果您喜欢冒险,您可以使用命令行工具手动收集本机代码覆盖率。请参阅blogs.msdn.com/b/phuene/archive/2007/05/03/…blogs.msdn.com/b/phuene/archive/2007/05/14/… 了解更多详情。
    【解决方案2】:
    //MyTestfile
    
    
    #include "stdafx.h"
    #include "MathFuncsDll.h"
    
    using namespace System;
    using namespace System::Text;
    
    using namespace System::Collections::Generic;
    
    using namespace Microsoft::VisualStudio::TestTools::UnitTesting;
    
    namespace anothertest
    {
        [TestClass]
        public ref class cuttwotest
        {
        public: 
            [TestMethod]
            void TestMethod1()
            {
                Assert::AreEqual ((MathFuncs::MyMathFuncs::Add(2,3)), 6, 0.05);
            }
        };
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-15
      • 2013-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-07
      • 1970-01-01
      相关资源
      最近更新 更多