C ++单元测试框架

C ++单元测试框架

C++ unit testing framework

我为我的C ++代码使用Boost Test框架,但是它有两个问题可能是所有C ++测试框架都常见的:

  • 无法创建自动测试存根(例如,通过从选定的类中提取公共功能)。
  • 您不能运行单个测试-您必须运行整个测试"套件"(除非您猜想创建了许多不同的测试项目)。

有谁知道更好的测试框架,还是我永远会嫉妒Java / .NET开发人员可用的测试工具?


我刚刚推出了自己的框架CATCH。它仍在开发中,但我相信它已经超越了大多数其他框架。
不同的人有不同的标准,但我试图在没有太多取舍的情况下涵盖大多数领域。
看看我的品酒师链接博客条目。我的五个主要功能是:

  • 仅标题
  • 自动注册基于功能和方法的测试
  • 将标准C ++表达式分解为LHS和RHS(因此您不需要一整套的断言宏)。
  • 支持基于功能的灯具中的嵌套部分
  • 使用自然语言进行名称测试-生成函数/方法名称

它不会生成存根-但这是一个相当专业的领域。我认为Isolator ++是第一个真正实现这一目标的工具。注意,模拟/存根框架通常独立于单元测试框架。 CATCH特别适合模拟对象,因为测试状态不会被上下文传递。

它还具有Objective-C绑定。

[更新]

几年前,我的答案刚刚发生。感谢您的宝贵意见!
显然,Catch在那时已经发展了很多。现在,它支持BDD样式测试(给定/何时/然后),标签(现在位于单个标头中)以及内部改进和细化的负载(例如,更丰富的命令行,清晰明了的输出等)。最新的博客文章在这里。


看一下Google C ++测试框架。

Google已将其用于所有内部C ++项目,因此它必须非常好。

http://googletesting.blogspot.com/2008/07/announcing-new-google-c-testing.html

http://code.google.com/p/googletest


Boost.Test确实允许按名称运行测试用例。或测试套件。或其中几个。

Boost.Test并不坚持实现main,尽管这样做确实很容易。

Boost.Test不必用作库。它具有单个标头变体。


我只是回答了一个非常类似的问题。我最终使用了Noel Llopis的UnitTest ++。我比boost :: test更喜欢它,因为它不坚持使用宏来实现测试工具的主程序-它可以插入您创建的任何可执行文件中。它确实遭受了boost :: test的相同困扰,因为它需要链接一个库。我使用了CxxTest,它比自动生成测试的C ++领域中的其他任何工具都更紧密(尽管它需要Perl成为您的构建系统的一部分)。 C ++只是不提供.NET语言和Java的反射钩。 Visual Studio Team System-开发人员版中的MsTest工具将自动生成非托管C ++的测试存根,但是必须从DLL导出方法才能执行此操作,因此它不适用于静态库。 .NET世界中的其他测试框架也可能具有此功能,但我对其中的任何一个都不熟悉。因此,现在我们将UnitTest ++用于非托管C ++,而我目前正在为托管库选择MsTest和NUnit。


我是UnitTest ++的忠实拥护者,它非常轻巧,但是可以完成工作。您可以在那里轻松运行单个测试。


好问题!几年前,我一直在环顾四周,寻找值得使用的东西,但很快就出现了。我一直在寻找轻量级的东西,不需要我链接某些库...您知道我可以在几分钟内启动并运行它。

但是,我坚持并最终在cxxtest上运行。

从网站:

  • 不需要RTTI
  • 不需要成员模板功能
  • 不需要异常处理
  • 不需要任何外部库(包括内存管理,文件/控制台I / O,图形库)
  • 完全作为一组头文件(和python脚本)分发。

哇...超级简单!包含一个头文件,从Test类派生,您就可以运行。在过去的四年中,我们一直在使用此工具,但我仍然没有找到令我更满意的东西。


尝试使用WinUnit。听起来很棒,并由John Robbins推荐。


我喜欢Boost单元测试框架,主要是因为它非常轻巧。

  • 我从未听说过会生成存根的单元测试框架。我通常不相信代码生成,只是因为它很快就会过时。当您有很多课程时,它可能会变得有用吗?

  • 支持测试驱动开发的人可能会说,每次都运行整个测试套件是很基本的,以确保没有引入回归。如果运行所有测试都花费了太多时间,也许您的测试太大,或者对应该被模拟的CPU密集型函数进行了太多调用?如果仍然存在问题,则可以在Boost单元测试周围使用一薄层包装,这样您就可以选择测试,并且可能比学习另一个框架并移植所有测试更快。


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


我正在使用tut-framework


Visual Studio具有内置的单元测试框架,这是为win32控制台应用程序设置测试项目的好链接:

http://codeketchup.blogspot.ie/2012/12/unit-test-for-unmanaged-c-in-visual.html

如果您在静态DLL项目上工作,则设置起来会容易得多,因为其他人指出了外部测试框架(如GTest和Boost)具有额外的功能。


http://groups.google.com/group/googletestframework,但这很新


CppUnit是对JUnit的最初敬意。


安德鲁·马洛(Andrew Marlow)的Fructose库值得一试... http://fructose.sourceforge.net/

我回想起他写Fructose时,他的文档中包含对其他产品的相当详细的分析和比较,但是找不到直接指向该文档的URL。


我正在尝试Igloo,它也是仅标头的C ++测试套件,即使其中包含的两个依赖项也仅标头。

因此,这非常简单明了。除了github上包含的示例外,主站点igloo-testing.org上还有示例和更多详细信息。我将在以后获得更多有关它和其他框架的经验时进行更新。


我也喜欢UnitTest ++。

麻烦之处在于,源代码发行版包含近40个单独的文件。这是荒谬的。通过管理所有这些单元测试文件,可以为一个简单项目管理源代码控制和构建任务。

我已经修改了UnitTest ++,以便可以通过添加一个.h和.cpp文件将其与项目集成。我称之为"最可爱"。详细信息请参见http://ravenspoint.com/blog/index.php?entry=entry080704-063557

它不会自动按照原始问题的要求生成测试存根。我不禁想到这样一个功能将带来更多麻烦,而不是值得,因为它会生成大量无用的代码"测试"访问器函数。


Eclipse / JUnit是Java的可靠软件包,两者都有C ++扩展/等效项。它可以满足您的要求。当然,您必须更改IDE。


我可以想象,自动存根测试功能将更多地是所讨论的功能(框架脚本或开发环境的功能)。据说CodeGear的C ++ Builder应用程序将快速生成用于用户功能的测试代码。


推荐阅读