我正在比较 GoogleMock 与 FakeIt 编写单元测试的情况。与 GoogleMock 相比,我更喜欢 FakeIt,因为我有 Java 背景,而且 FakeIt 与 Mockito/JMock 语法非常接近,这使得使用该库更容易编写和维护。
但是 FakeIt GIT home ( https://github.com/eranpeer/FakeIt ) 说它不支持 MultipleInheritance 并且应用程序 im testing 具有多重继承的代码。我不必支持菱形继承,所以我想知道是只是多重继承的那个方面不受支持,还是还有其他方面也不受支持?
最佳答案
不幸的是,似乎不支持任何类型的多重继承,即使它只是一个统一了其他几个“接口(interface)”的“接口(interface)”,例如:
struct IA { virtual void a() = 0; };
struct IB { virtual void b() = 0; };
struct IC : public IA, public IB {};
fakeit::Mock<IC> mock; // error :(
(检查是使用 std::is_simple_inheritance_layout<T>
完成的)
不过,我确实找到了解决这个问题的小方法,至少对于简单的场景是这样:
class MockC : public IC {
public:
MockC(IA& a, IB& b) : m_a(a), m_b(b) {}
void a() override { return m_a.a(); };
void b() override { return m_b.b(); };
private:
IA& m_a;
IB& m_b;
};
fakeit::Mock<IA> mockA;
fakeit::Mock<IB> mockB;
MockC mockC(mockA.get(), mockB.get());
// Use mockA and mockB to set up the mock behavior the way you want it.
// Just make sure not to use mockC after they go out of scope!
关于c++ - C++ FakeIt 库多重继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33639577/