是否可以编写一个自动包装和虚拟化非虚拟接口的c ++类模板?

时间:2015-11-26 08:17:08

标签: c++ unit-testing wrapper non-virtual-interface

问题

编写单元测试时,通常需要模拟对象。为了使prodcution对象可替换,mock对象类派生自生产对象类并覆盖一些虚函数。

当生产类没有虚拟功能且无法改变时,问题就出现了。现在我看到两个选择来解决问题。

  1. 将您的类转换为由子系统类型参数化的类模板。您的生产类将为MyClass<ProductionSubsystem>,测试将使用MyClass<ProductionSubsystem>

  2. 手动编写一个包含虚函数的包装器,该函数调用包装子系统类的非虚函数。然后模拟包装器。

  3. 我对这两个选项中的任何一个都不满意。 1迫使我把我的“简单”类变成一个类模板,2迫使我写了很多样板代码。

    所以我想知道是否可以自动编写非虚拟类的包装器的过程。我想象这样的事情:

    MyClass<MockSubsystem>

    此设置应允许以下用例:

    MyClass<MockSubsystem>

    问题

    在C ++中是否可以实现AutoWrapper和AutoWrapperImpl这两个类?如果是,它是如何完成的,是否有公开的解决方案?

0 个答案:

没有答案