好处:
CppUnit 的主要优点是它遵循 XUnit 模式的 Setup / Test / Teardown。任何具有 XUnit 经验的人都可以理解该范例。必须使用宏而不是属性或反射(就像使用 .Net 或 Java XUnit 框架一样)是一种解决方法,但并不是很麻烦。
CppUnit 本身是可移植的。尽管 TestRunner.DLL GUI 完全在 MFC 中构建,因此仅适用于 Windows,但命令行版本不使用 Microsoft 特定代码,并且可以在许多平台上执行。
它也非常稳定。多年来,开发人员几乎没有对它做任何事情,主要是因为它的核心不需要任何东西。它把它的一件事做得很好。
缺点:
不幸的是,缺点是缺乏最终用户的支持。我最大的抱怨是没有将 CppUnit 集成到 IDE 中的好工具。我认为这最严重的原因是测试需要纪律。任何使单元测试变得比实际更难的事情都将被用作不这样做的借口。
您可以手动添加格式以输出 Visual Studio 将正确解释的测试失败行(因此双击它将带您到测试中失败的 ASSERTion。)但这不随工具提供,您必须学习它在像这样的网站上外部。
您可以编写一个 IDE 插件来为您生成单元测试框架代码,但我知道没有公开提供此类插件。同样,这对于开发人员来说需要很容易。
因为没有集成,所以也没有关于将 CppUnit 项目合并到您的代码库中的已发布指南。这使得开始变得非常困难。
如果你设法让它工作,有几个人报告了幻影 CppUnit 项目签入/签出问题。
CppUnit 不支持任何特定的模拟框架。由于大多数模拟框架使用反射来使开发模拟变得轻松,因此 C++ 总是会在那里受到一些影响。
备择方案:
有很多很多的 C++ 单元测试框架。Googletest 得到了一些人的好评。CppUnitLite 受到一些人的称赞,但我发现它非常混乱和无益。CxxUnit 需要一个笨拙的 Python 扫描和解析步骤——对于不太文明的时代来说,这是一种不太优雅的武器。在这个领域有许多商业参与者,提供他们的商品。
我推荐http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks#C.2B.2B以获得非常丰富的替代品列表。
虽然我还没有机会使用它,但我知道 Visual Studio 2012 已经整合了 Microsoft 自己的测试套件工具,并使其可用于本机 C++ 代码。以前,它只能通过 .Net 集成工作,这对于大多数 C++ 代码来说是无用的。我真的很期待拥有一整套工具,包括它们的代码覆盖集成,它可以突出显示您的测试代码,向您展示测试覆盖中的差距。
底线:如果我今天重新开始,我会选择一个不同的与 XUnit 兼容的测试框架,一个与 IDE 完全集成的框架。当我们选择 CppUnit 时,它是 Visual Studio 6.0 中最好的游戏,但现在我们只是忍受它。