C++ unit testing framework我为我的C ++代码使用Boost Test框架,但是它有两个问题可能是所有C ++测试框架都常见的:
有谁知道更好的测试框架,还是我永远会嫉妒Java / .NET开发人员可用的测试工具?
我刚刚推出了自己的框架CATCH。它仍在开发中,但我相信它已经超越了大多数其他框架。
它不会生成存根-但这是一个相当专业的领域。我认为Isolator ++是第一个真正实现这一目标的工具。注意,模拟/存根框架通常独立于单元测试框架。 CATCH特别适合模拟对象,因为测试状态不会被上下文传递。 它还具有Objective-C绑定。 [更新]
几年前,我的答案刚刚发生。感谢您的宝贵意见! 看一下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上运行。 从网站:
哇...超级简单!包含一个头文件,从Test类派生,您就可以运行。在过去的四年中,我们一直在使用此工具,但我仍然没有找到令我更满意的东西。 尝试使用WinUnit。听起来很棒,并由John Robbins推荐。 我喜欢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应用程序将快速生成用于用户功能的测试代码。 |