编写单元测试时,通常需要模拟对象。为了使prodcution对象可替换,mock对象类派生自生产对象类并覆盖一些虚函数。
当生产类没有虚拟功能且无法改变时,问题就出现了。现在我看到两个选择来解决问题。
将您的类转换为由子系统类型参数化的类模板。您的生产类将为
,测试将使用MyClass<ProductionSubsystem>
MyClass<ProductionSubsystem>
手动编写一个包含虚函数的包装器,该函数调用包装子系统类的非虚函数。然后模拟包装器。
我对这两个选项中的任何一个都不满意。 1迫使我把我的“简单”类变成一个类模板,2迫使我写了很多样板代码。
所以我想知道是否可以自动编写非虚拟类的包装器的过程。我想象这样的事情:
MyClass<MockSubsystem>
此设置应允许以下用例:
MyClass<MockSubsystem>
在C ++中是否可以实现AutoWrapper和AutoWrapperImpl这两个类?如果是,它是如何完成的,是否有公开的解决方案?