C ++单元测试框架
我为我的C ++代码使用Boost Test框架,但是它存在两个可能对所有C ++测试框架都常见的问题:
- 无法创建自动测试存根(例如,通过从选定的类中提取公共功能)。
- 我们不能运行单个测试-我们必须运行整个测试套件(除非我们猜想创建了许多不同的测试项目)。
有谁知道更好的测试框架,还是我永远嫉妒Java / .NET开发人员可用的测试工具?
解决方案
回答
尝试使用WinUnit。听起来很棒,并由John Robbins推荐。
回答
http://groups.google.com/group/googletestframework,但这很新
回答
我是UnitTest ++的忠实拥护者,它非常轻巧,但是可以完成工作。我们可以在那里轻松地运行单个测试。
回答
Eclipse / JUnit是Java的可靠软件包,两者都有C ++扩展/等效项。它可以满足要求。当然,我们必须更改IDE。
回答
好问题!几年前,我一直在环顾四周,寻找值得使用的东西,但很快就出现了。我一直在寻找轻量级的东西,不需要我在某些库中进行链接……我们知道我可以在几分钟内启动并运行它。
但是,我坚持并最终在cxxtest上运行。
从网站:
- 不需要RTTI
- 不需要成员模板功能
- 不需要异常处理
- 不需要任何外部库(包括内存管理,文件/控制台I / O,图形库)
- 完全作为一组头文件(和python脚本)分发。
哇...超级简单!包含一个头文件,从Test类派生,我们就可以运行。在过去的四年中,我们一直在使用此工具,但我仍然没有找到令我更满意的东西。
回答
我也很喜欢UnitTest ++。
麻烦之处在于,源分发版包含近40个单独的文件。这是荒谬的。通过管理所有这些单元测试文件,可以为一个简单的项目管理源代码控制和构建任务。
我已经修改了UnitTest ++,以便可以通过添加一个.h和.cpp文件将其与项目集成。我称之为"最可爱"。有关详细信息,请访问http://ravenspoint.com/blog/index.php?entry=entry080704-063557
它不会自动按照原始问题的要求生成测试存根。我不禁想到这样一个功能将带来更多麻烦,而不是值得,因为它会生成大量无用的代码"测试"访问器函数。
回答
我喜欢Boost单元测试框架,主要是因为它非常轻巧。
- 我从未听说过会生成存根的单元测试框架。我通常不相信代码生成,只是因为它很快就会过时。当我们有很多课程时,它可能会变得有用吗?
- 支持测试驱动开发的人可能会说,每次运行整个测试套件是很基本的,以确保我们没有引入回归。如果运行所有测试花费了太多时间,也许测试太大,或者对应该被模拟的CPU密集型函数进行了太多调用?如果仍然存在问题,可以使用围绕提升单元测试的薄包装器来选择测试,并且可能比学习另一个框架并移植所有测试更快。
回答
我可以想象,自动存根测试功能将更多地是所讨论的功能(框架脚本或者开发环境中的功能)。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。(据说CodeGear的C ++ Builder应用程序将快速生成用于用户功能的测试代码。
回答
看一下Google C ++测试框架。
Google已将其用于其所有内部C ++项目,因此它必须非常好。
http://googletesting.blogspot.com/2008/07/announcing-new-google-c-testing.html
http://code.google.com/p/googletest
回答
我只是回答了一个非常类似的问题。我最终使用了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。
回答
我正在使用tut-framework
回答
Aeryn是另一个值得关注的框架
回答
Boost.Test确实允许按名称运行测试用例。或者测试套件。或者其中几个。
Boost.Test并不坚持实现main,尽管这样做确实很容易。
无需将Boost.Test用作库。它具有单个标头变体。
回答
CppUnit是对JUnit的最初敬意。
回答
我刚刚推出了自己的框架CATCH。它仍在开发中,但我相信它已经超越了大多数其他框架。
不同的人有不同的标准,但我试图在没有太多取舍的情况下涵盖大多数领域。
看看我的品酒师链接博客条目。我的五个主要功能是:
- 仅标题
- 自动注册基于功能和方法的测试
- 将标准C ++表达式分解为LHS和RHS(因此我们不需要一整套的断言宏)。
- 支持基于功能的灯具中的嵌套部分
- 使用自然语言进行名称测试-生成函数/方法名称
它不会生成存根,但这是一个相当专业的领域。我认为Isolator ++是第一个真正实现这一目标的工具。请注意,模拟/存根框架通常独立于单元测试框架。 CATCH特别适合模拟对象,因为测试状态不会被上下文传递。
它还具有Objective-C绑定。
[更新]
几年前,我的答案刚刚发生。感谢所有宝贵意见!
显然,Catch在那时已经发展了很多。现在,它支持BDD样式测试(给定/何时/然后),标签(现在位于单个标头中)以及内部改进和细化(例如更丰富的命令行,清晰明了的输出等)的支持。最新的博客文章在这里。