最先进的C++;单元测试? 什么是最新的C++语言单元测试方法?具有更强大内省能力的语言(比如Python)拥有更自然的单元测试框架。可以更容易地定义单元测试。相比之下,经典的CppUnit(基于JUnit)似乎采取了非常保守的方法。有没有新的更好的东西使用C++的特定能力(或者C++ 11)来让生活更容易? 在Windows Windows本地C++(Visual Studio 2005和2010)中,我已经使用了 CppUnit > /Cuff>框架,对项目的某些部分进行了相当简单的方式。我们之前没有选择测试驱动的开发方法,因为已经有很多遗留代码,并且我们发现为它添加测试非常困难。我们必须重构应用程序,但即使在这种情况下,添加所有好的测试也会很耗时

最先进的C++;单元测试? 什么是最新的C++语言单元测试方法?具有更强大内省能力的语言(比如Python)拥有更自然的单元测试框架。可以更容易地定义单元测试。相比之下,经典的CppUnit(基于JUnit)似乎采取了非常保守的方法。有没有新的更好的东西使用C++的特定能力(或者C++ 11)来让生活更容易? 在Windows Windows本地C++(Visual Studio 2005和2010)中,我已经使用了 CppUnit > /Cuff>框架,对项目的某些部分进行了相当简单的方式。我们之前没有选择测试驱动的开发方法,因为已经有很多遗留代码,并且我们发现为它添加测试非常困难。我们必须重构应用程序,但即使在这种情况下,添加所有好的测试也会很耗时,c++,visual-studio,unit-testing,cross-platform,C++,Visual Studio,Unit Testing,Cross Platform,最近,我们已经切换到VisualStudio2013(因为C++11标准实现),我们将开始一个新的、相当长期的项目 有了以前良好的(小型)单元测试经验,我想尝试测试驱动的开发方法。由于该项目不是一个很小的项目(预期大小与旧项目大致相同,即大约200K行代码),因此我更喜欢更简单(但能力不弱)的框架 新项目有可能导致跨平台实现(Windows和Linux)。Visual Studio 2013中提供了单元测试支持,但我没有这方面的经验,也没有这方面的经验,也没有这方面的经验如何适应跨平台测试 到目

最近,我们已经切换到VisualStudio2013(因为C++11标准实现),我们将开始一个新的、相当长期的项目

有了以前良好的(小型)单元测试经验,我想尝试测试驱动的开发方法。由于该项目不是一个很小的项目(预期大小与旧项目大致相同,即大约200K行代码),因此我更喜欢更简单(但能力不弱)的框架

新项目有可能导致跨平台实现(Windows和Linux)。Visual Studio 2013中提供了单元测试支持,但我没有这方面的经验,也没有这方面的经验,也没有这方面的经验如何适应跨平台测试

到目前为止,我已经找到了答案。然而,人们看不出它们在原则上有什么不同。我目前有三位候选人(保守选择):

  • Boost——可能的候选人;C++标准的测试平台;因此,它很可能被广泛接受;可能是最大的用户群。它似乎比
    CppUnit
    更高级
  • CppUnit——我知道,但编写所有代码并不是一件愉快的事
  • Visual Studio 2013内置--对我来说是新的,可能会以某种方式生成骨架
无论如何,这三种方法似乎都使用类似的方法。VS2013可能支持生成代码,但这并不意味着它会导致任何更简单的事情


有什么全新的方法吗?

我已经使用Visual Studio 2013内置测试框架6周了,我非常喜欢它。集成度非常好,很容易获取。如果您正在从事一个只针对Windows的项目,那么我完全推荐它。

唯一值得考虑的测试框架是:

有关lib的介绍,请参见和

使用起来很简单(一个只包含一个报头的头文件库),可移植的,并且是迄今为止最简单、最干净的任何C++单元测试框架的语法。 与其他库不同,您不需要记住24个不同的宏或不同类型的断言

您只需使用以下命令:

int one = 1;
REQUIRE( one == 2 );
通过一些巧妙的运算符重载,将在输出中显示原始表达式和扩展参数值:

test.cc(7): FAILED:
  REQUIRE( one == 2 )
with expansion:
  1 == 43
与此相比,使用IMO的所有其他框架都是一件麻烦事

在我发现这个之前,我曾经使用Boost.Test,但是设置和使用起来要麻烦得多。我们在工作中使用CPPFUnit,这似乎被设计成尽可能脆弱和痛苦


我简要介绍了VS2013测试框架,但还没有尝试过,它看起来还可以,但很像是在模仿“老把戏”。它并不试图比CPPFUnit、Boost.Test和所有其他在捕获之前出现的方法更干净、更容易或更好。所以我想说,不要麻烦了。测试应该很容易编写(也很容易理解),Catch比我在这方面见过的其他框架都要快。

事实是,它将主要是Windows项目。不管怎样,你能猜到以后将其转换为跨平台有多困难吗?你能将它与另一个框架进行比较吗?是否有任何东西看起来接近VS框架?除非它不起作用。对于我来说,在VS2013中,我已经尝试了两天让它与hello world DLL一起工作。它给出的只是一个隐晦的错误:“无法设置测试上下文”。通常,每次我看到微软提供的单元测试内容时,都会给我留下一个压倒性的印象:他们不知道如何做这些事情!我要说的是,我不是一个讨厌微软的人,我一直在使用VisualStudio,10年来我一直是MVP。但说真的,微软的软件开发文化植根于20世纪70年代或80年代的想法和组织结构中。微软内部有一些小团体在实践TDD和一些敏捷的表象,但这根本不在文化DNA中,这就是为什么他们的敏捷“解决方案”总是不合适的原因。这里添加的晚些时候(现在是2015年)。我在运行32位或64位的单元测试时遇到了巨大的困难。我对每一种都有不同的构建配置,但由于各种原因,很难或不可能选择一种同时包含这两种配置(一种或另一种)的配置。它非常不透明,几乎不可能在这方面进行配置。因此,我放弃它,选择了一个更简单的项目/框架,其中32/64/C++/CLI位不会混合在一起。只是好奇…@Sean:3年后……你还在使用Visual Studio 2013内置测试框架吗?我正在为“我们说话”而挣扎。这个问题被完全改写了。请考虑重新开放。经过几年,我仍然不同意这是一个离题的问题。这个问题被完全改写了。在过去,它显然引起了一些关注。标记的答案命名了Catch工具,但它也包含对该工具的注释。这样,答案可以被认为是“告诉我工具”。然而,答案是否定的