代码之家  ›  专栏  ›  技术社区  ›  Charles Beattie

如何在大型C++项目中实现单元测试?[关闭]

  •  40
  • Charles Beattie  · 技术社区  · 17 年前

    我非常相信将单元测试作为构建大型多平台应用程序的一部分。我们目前正计划在一个单独的项目中进行单元测试。这有利于保持代码库的整洁。然而,我认为这将把测试代码与单元的实现分开。你如何看待这种方法,有没有像JUnit这样的C++应用工具?

    9 回复  |  直到 17 年前
        1
  •  21
  •   community wiki 3 revs, 3 users 93% Luc Hermitte    10 年前

    C++有很多测试单元框架。 CPPUT当然不是我要选择的(至少在稳定版本1.x中是这样,因为它缺少许多测试,并且需要大量的冗余代码行)。 到目前为止,我的首选框架是 CxxTest 我计划评估 Fructose 总有一天。

    无论如何,有一些“论文”来评估C++的TU框架:

        2
  •  11
  •   Ferruccio    9 年前

    这是一个合理的方法。

    我两个都取得了很好的成绩 UnitTest++ Boost.Test

    我已经看了CPPUnit,但对我来说,它更像是JUnit的翻译,而不是C++的东西。

    更新: 这些天我更喜欢用 Catch . 我发现它既有效又简单。

        3
  •  3
  •   linuxbuild    10 年前

    您应该将基础代码分离到一个共享(动态)库中,然后为这个库编写单元测试的主要部分。

    两年前(2008)我参与了Linux基金会部署的大型LSB基础设施项目。这个项目的目标之一是为来自Linux核心库的40000个函数编写单元测试。在这个项目中,我们创建了 AZOV technology 以及名为 API Sanity Autotest 以便自动生成所有测试。您可以尝试使用此工具为基础库生成单元测试。

        4
  •  2
  •   graham.reeds    17 年前

    我使用UnitTest++。这些测试是在一个单独的项目中进行的,但是实际的测试与实际的代码是相互交织的。它们存在于被测试部分下的文件夹中。 IE:
    myproject\src\<-实际应用程序的源
    myproject\src\tests<-测试的来源
    如果您有嵌套的文件夹(但没有),那么它们也将有自己的\tests子目录。

        5
  •  1
  •   NotJarvis    17 年前

    CPPUnter是直接用于C++应用的Junit http://cppunit.sourceforge.net/cppunit-wiki

    我个人在另一个项目中创建了单元测试,并创建了一个单独的构建配置,它构建了所有单元测试和依赖源代码。在某些情况下,我想测试类的私有成员函数,因此我将测试类作为要测试的对象的友元类,但在通过预处理器声明构建“非测试”配置时隐藏友元声明。

    然而,当我将测试集成到遗留代码中时,我最终完成了这些代码编写工作。如果您从单元测试的目的开始,一个更好的设计可能很简单。

        6
  •  1
  •   Aaron Hinni    17 年前

    您可以为源代码树中的每个库在该库的子目录中创建一个单元测试项目。最后,每个库都有一个测试驱动程序应用程序,这使得运行单个测试套件更容易。通过将它们放在子目录中,它可以保持代码库的整洁,同时也可以保持测试接近代码。

    可以很容易地编写脚本来运行源代码树中的所有测试套件并收集结果。

    多年来,我一直在使用一个定制版的CPP,取得了巨大的成功,但现在还有其他的选择。 GoogleTest 看起来很有趣。

        7
  •  1
  •   Chad    17 年前

    我认为您在单元测试方面走上了正确的道路,这是一个提高产品可靠性的伟大计划。

    尽管在将应用程序转换为不同的平台甚至不同的操作系统时,单元测试并不能解决所有的问题。其原因是,过程单元测试是为了发现应用程序中的错误而进行的。它只是简单地将尽可能多的可以想象的输入抛到您的系统中,并在另一端等待结果。这就像让猴子不断地敲打键盘并观察结果(测试版测试人员)。

    要进入下一步,通过良好的单元测试,您需要关注应用程序的内部设计。我发现最好的方法是使用一种叫做“契约式编程”或“契约式设计”的设计模式或设计过程。另一本书对将可靠性构建到核心设计中非常有帮助。

    调试开发过程:保持专注、确定发货日期和建立可靠团队的实用策略。

    在我们的开发团队中,我们非常仔细地研究了我们所认为的程序员错误、开发人员错误、设计错误,以及如何使用单元测试,以及如何通过DBC在软件包中构建可靠性,并遵循调试开发过程的建议。

        8
  •  1
  •       17 年前

    使用tut http://tut-framework.sourceforge.net/ 非常简单,只是头文件没有宏。无法生成XML结果

        9
  •  1
  •   David Sykes    17 年前

    CxxTest 同样值得一看的是轻量级的、易于使用的跨平台JUnit/CppUnit/XUnit的C++框架。我们发现添加和开发测试非常简单

    Aeryn 是另一个值得研究的C++测试框架吗?