Unit testing for C++ code - Tools and methodology我正在研究一个已经开发了几年的大型c ++系统。 作为提高现有代码质量的努力的一部分,我们参与了一个大型的长期重构项目。 你知道一个很好的工具可以帮助我用C ++编写单元测试吗? 也许类似于Junit或Nunit? 任何人都可以为编写单元测试的方法提供一些很好的建议,这些模块是在没有单元测试的情况下编写的吗? 将单元测试应用于遗留代码是编写"有效使用遗留代码"的原因。 Michael Feathers是作者 - 正如其他答案所述,他参与了CppUnit和CppUnitLite的创作。
Google最近发布了自己的库,用于测试C ++应用程序,称为Google Test。 Google Code上的项目 查看几个可用套件之间的出色比较。该文章的作者后来开发了UnitTest ++。 我特别喜欢它(除了它处理异常等事实之外)是围绕测试用例和测试夹具定义的"管理"量非常有限。 Boost有一个测试库,其中包含对单元测试的支持。可能值得一试。 Games From Within的Noel Llopis是探索C ++单元测试框架丛林的作者,这是对各种C ++单元测试框架的综合(但现在已过时)评估,以及一本关于游戏编程的书。 他使用CppUnitLite已经有一段时间了,修复了各种各样的东西,但最终与另一个单元测试库作者联手,并制作了UnitTest ++。我们在这里使用UnitTest ++,到目前为止我非常喜欢它。 (对我而言)它具有足够的功率平衡和小占地面积。 我使用了自行开发的解决方案,CxxTest(需要Perl)和boost :: test。当我在我目前的工作中实现单元测试时,它几乎归结为UnitTest ++ vs boost :: test。 我真的很喜欢我使用的大多数升级库,但恕我直言,boost :: test有点过于苛刻。我特别不喜欢它需要你(AFAIK)使用boost :: test宏来实现测试工具的主程序。我知道它不是"纯粹的"TDD,但有时我们需要一种方法来运行带有GUI应用程序的测试,例如当在命令行上传入一个特殊的测试标志时,boost :: test不能支持这种类型场景。 UnitTest ++是我在(有限的)体验中遇到的最简单的设置和使用测试框架。 我正在使用优秀的Boost.Test库以及一个鲜为人知但非常棒的Turtle库:一个基于boost的模拟对象库。
作为一个代码示例说得比单词更好,想象一下你想测试一个在
看看在模拟对象上声明期望有多简单和冗长?显然,如果没有达到预期,测试就会失败。
我刚推出了自己的框架,CATCH。它仍在开发中,但我相信它已经超过了大多数其他框架。
它还具有Objective-C绑定。 CxxTest是一个轻松,易于使用和跨平台的JUnit / CppUnit / xUnit类C ++框架。 UnitTest ++,小而简单。 CppUnit就是这样。见以下链接: http://cppunit.sourceforge.net/cppunit-wiki http://en.wikipedia.org/wiki/CppUnit 我目前正在寻找一个单元测试和模拟框架,可以在我们公司使用长期代码库。如您所知,c ++的单元测试框架列表很长,所以我应用了一些过滤器来将其缩小为手工填充,可以更仔细地查看。第一个过滤标准是它必须是免费的。第二个标准是项目活动。我也寻找模拟框架,因为如果你想编写单元测试你需要一个。 我想出了以下列表(大约)按活动排序,最高活动位于顶部:
模拟框架 模拟框架的数量远小于测试框架的数量,但这里是我发现最近有活动的框架。
结论 如果您的代码库长期存在,请在BoostTest + Turtle和GoogleTest + GoogleMock之间进行选择。我认为这两个将有长期维护。如果你只有一个短暂的代码库,你可以尝试Catch,它有一个很好的语法。然后你需要另外选择一个模拟框架。如果您使用Visual Studio,您可以下载BoostTest和GoogleTest的测试运行适配器,这将允许您使用集成到VS中的测试运行器GUI运行测试。 另请参阅此处与密切相关的问题"选择c ++单元测试工具/框架"的答案 还有TUT,Template-Unit-Test,一个基于模板的框架。它的语法很笨拙(有些人称之为模板滥用),但它的主要优点是它都包含在单个头文件中。 你会在这里找到一个用TUT编写的单元测试的例子。 CppUTest是一个优秀,轻量级的C和C ++单元测试框架。 我已经尝试过CPPunit并且它不是非常用户友好。 我所知道的唯一选择是使用C ++ .NET来包装C ++类并使用.NET单元测试框架(NUnit,MBUnit等)编写单元测试。 看看CUnitWin32。它是为MS Visual C编写的。它包含一个例子。 看看cfix(http://www.cfix-testing.org),它专门用于Windows C / C ++开发,并支持用户模式和内核模式单元测试。 如果您使用的是Visual Studio 2008 SP1,我强烈建议您使用MSTest编写单元测试。然后我使用Google mock来编写模拟。与IDE的集成是理想的,并且在编辑三个位置以添加一个测试方面允许并且不承担CPPunit的开销。 我认为VisualAssert在VS集成方面做得很好。它允许您从VS运行和调试测试,并且您无需创建可执行文件即可运行测试。 ObjectMentor的Michael Feathers在开发CppUnit和CppUnitLite方面发挥了重要作用。 他现在推荐CppUnitLite 我正在使用带有Typemock Isolator ++的MS Test。试试看! 检查果糖:http://sourceforge.net/projects/fructose/ 这是一个非常简单的框架,只包含头文件,因此便于携带。 |