2011-05-17 332 views
1

我需要模拟一个只有非虚拟方法的类。这个类 有一个拷贝构造函数。我如何为它写一个模拟方法。我得到一个 编译错误,如果我只是用GMock和模拟非虚拟方法的构造函数

MOCK_METHOD1(classname, void(classname& source)); 

在此先感谢。

+1

我知道这是旧的,但这里的嘲讽非虚方法的一些文档:https://github.com/google/googletest/blob/master/googlemock/docs/CookBook.md#mocking-nonvirtual-methods – wulfgarpro 2017-01-15 10:29:12

回答

5

你不能用gmock来模拟非虚函数。所以要考虑的第一个选择是让功能变得虚拟。如果您担心虚拟化功能的性能开销,请确保这是真正的问题(通过测量),但通常情况并非如此。

如果没有可能使虚拟功能变为可能的替代解决方案是使用模板。有关此技术的详细信息,请参阅this question,有关使用该技术的优缺点,请参阅this question

+0

或者,使用预处理器在测试构建中有条件地使您的函数虚拟化,并在生成构建中保持它们不变(非虚拟)。两全其美。有一件事需要记住:它由于切片而与多态值成员打成一片。 – Regexident 2013-05-14 21:32:44