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应用程序将快速生成用于用户功能的测试代码。


推荐阅读

    linux运行图形界命令?

    linux运行图形界命令?,系统,密码,地址,电脑,图形界面,地方,工具,界面,终端,

    linux怎样运行命令?

    linux怎样运行命令?,系统,工作,信息,基础,地址,命令,目录,工具,密码,一致,Lin

    linux编译完运行命令?

    linux编译完运行命令?,系统,代码,环境,工具,信息,命令,文件,程序,终端,编辑,

    linux命令程序运行?

    linux命令程序运行?,状态,系统,服务,情况,命令,进程,软件,数据,发行,时间,Lin

    linux运行多个命令?

    linux运行多个命令?,环境,软件,系统,工作,服务,连续,命令,指令,分号,冲突,lin

    linux运行命令查看?

    linux运行命令查看?,系统,信息,状态,命令,名称,情况,地址,软件,进程,第一,lin

    linux中命令运行软件?

    linux中命令运行软件?,软件,系统,名称,工具,电脑,位置,环境,中心,在线,初级,

    脚本linux上运行命令?

    脚本linux上运行命令?,工具,代码,时间,密码,系统,环境,名字,位置,第三,下来,t

    linux运行命令的脚本?

    linux运行命令的脚本?,系统,服务,工具,脚本,意外,技术,分析,文件,方法,命令,s

    linux影藏运行命令?

    linux影藏运行命令?,档案,电脑,标准,设备,代码,工具,系统,查询系统,暂停,命

    linux运行脚本的命令?

    linux运行脚本的命令?,系统,工具,代码,服务,脚本,状态,密码,环境,位置,暂停,l

    linux命令行运行中断?

    linux命令行运行中断?,连续,工作,系统,信息,程序,命令,设备,工具,网络,情况,L

    vim运行linux命令?

    vim运行linux命令?,系统,工作,信息,地址,命令,标准,时间,情况,工具,基础,linu

    linux下并行运行命令?

    linux下并行运行命令?,系统,服务,工作,命令,环境,网络,暂停,文件,脚本,参数,l

    jar运行命令linux?

    jar运行命令linux?,项目,系统,平台,工具,上期,命令,选项,日志,文件名,目录,Li

    jar运行命令linux?

    jar运行命令linux?,项目,系统,平台,工具,上期,命令,选项,日志,文件名,目录,Li

    linux下并行运行命令?

    linux下并行运行命令?,系统,服务,工作,命令,环境,网络,暂停,文件,脚本,参数,l

    linux命令行后台运行?

    linux命令行后台运行?,服务,状态,标准,暂停,命令,后台,连续,地方,工作,方法,l

    脚本运行linux命令?

    脚本运行linux命令?,系统,环境,工具,工作,位置,底部,代码,发行,官网,终端,lin