在C ++下进行单元测试不如在Java,C#,Python等环境下普遍进行的原因是有原因的。血腥的痛苦。
我的团队研究了几个用于单元测试的开源框架,尤其侧重于模拟。主要缺点是您不能独立于这些框架编写生产代码。也就是说,这些框架要求以某种方式编写您的C ++生产代码,以便为此编写测试。这几乎排除了为遗留代码编写测试的过程,而无需进行痛苦而危险的重构工作。
C ++的模拟技术依赖于继承或依赖项注入。继承有局限性,因为它不适用于具体的类和方法,而注入(通过模板,构造函数或setter参数或运行时查找实现)则具有高度的侵入性。
其他语言不受这些限制的困扰,并且生产代码完全独立于单元测试代码。我们遇到的唯一允许C ++使用的工具是称为Isolator ++的商业产品。显然,它可以即时修改正在运行的生产代码。
我很怀疑,但是有人知道没有对生产代码施加要求的C ++开源模拟解决方案吗?
似乎这是C ++标准活动提供语言扩展以改善单元测试现状的成熟领域。