你如何在大规模的C ++项目中实现unit testing?

我坚信使用unit testing是构build大型多平台应用程序的一部分。 我们目前正在计划在单独的项目中进行unit testing。 这有利于保持我们的代码基础清洁。 不过,我认为这样会将testing代码与实施单元分开。 你对这种方法有什么看法,有没有像C ++应用程序的JUnit的工具?

C ++有很多testing单元框架。 CppUnit肯定不是我会select的(至less在1.x的稳定版本中,因为它缺less很多testing,并且需要大量的冗余代码行)。 到目前为止,我的首选框架是CxxTest ,而且我计划在某天评估果糖 。

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

  • 探索C ++unit testing框架丛林 ,Noel Llopis
  • 超载日记#78中的一篇文章

这是一个合理的方法。

UnitTest ++和Boost.Test都有很好的结果

我已经看过CppUnit,但对我来说,感觉更像是JUnit的翻译,而不是针对C ++的东西。

更新:这几天我更喜欢使用Catch 。 我发现它是有效和简单的使用。

你应该把你的基本代码分离到一个共享的(dynamic)库,然后为这个库编写unit testing的主要部分。

两年前(2008年),我参与了Linux基金会部署的大型LSB基础设施项目。 这个项目的目标之一是为Linux核心库编写40.000个函数的unit testing。 在这个项目的背景下,我们创build了AZOV技术和名为API Sanity Autotest的基本工具,以便自动生成所有的testing。 您可以尝试使用此工具为您的基本库生成unit testing。

我使用UnitTest ++。 testing是在一个单独的项目,但实际的testing与实际的代码交织在一起。 它们存在于被测部分下的文件夹中。 即:
MyProject \ src \ < – 实际应用程序的来源
MyProject \ src \ tests < – testing的来源
如果你有嵌套文件夹(而谁没有),那么他们也将有自己的\ tests子目录。

Cppunit是C ++应用程序的Junit的直接等价物http://cppunit.sourceforge.net/cppunit-wiki

就个人而言,我在一个不同的项目中创build了unit testing,并创build了一个独立的构buildconfiguration,构build了所有的unit testing和相关的源代码。 在某些情况下,我想testing一个类的私有成员函数,所以我使Test类成为待测对象的一个​​朋友类,但是在通过预处理器声明构build“非testing”configuration时隐藏了朋友声明。

然而,当我将testing集成到遗留代码中时,我最终做了这些编码操作。 如果你是从unit testing开始的,更好的devise可能很简单。

您可以为该库的子目录中的源代码树中的每个库创build一个unit testing项目。 您最终会为每个库提供一个testing驱动程序应用程序,这使得运行一套testing变得更加容易。 通过把它们放在一个子目录中,它保持你的代码基础干净,但也使testing接近代码。

可以轻松地编写脚本来运行源代码树中的所有testing套件并收集结果。

多年来,我一直使用原始CppUnit的定制版本,但现在还有其他的select。 GoogleTest看起来很有趣。

我认为你在unit testing的正确道路上,以及提高产品可靠性的伟大计划。

虽然unit testing不能解决所有的问题,当你的应用程序转换到不同的平台,甚至不同的操作系统。 原因在于,stream程unit testing通过发现应用程序中的错误。 它只是简单地将尽可能多的input引入系统,并等待另一端的结果。 就像让一只猴子不停地敲击键盘并观察结果(Betatesting者)。

为了进行下一步,通过良好的unit testing,您需要关注应用程序的内部devise。 我发现的最好的方法是使用称为“合同编程”或“按合同devise”的devise模式或devise过程。 另一本书对于在你的核心devise中构build可靠性非常有帮助。

调整发展过程:重点关注,打击date,build设实干队伍的实用策略。

在我们的开发团队中,我们仔细研究了我们认为是程序员错误,开发人员错误,devise错误,以及如何使用unit testing以及通过DBC构build软件包的可靠性,并遵循debugging开发的build议proccess。

CxxTest也值得一看,为C ++轻量级,易于使用的跨平台JUnit / CppUnit / xUnit-like框架。 我们发现添加和开发testing非常简单

Aeryn是另一个值得关注的C ++testing框架