bro*_*oun 5 c++ unit-testing googletest googlemock
我正在比较 GoogleMock 和 FakeIt 来编写单元测试。与 GoogleMock 相比,我更喜欢 FakeIt,因为我有 Java 背景,而且 FakeIt 坚持使用 Mockito/JMock 语法,这使得使用该库更容易编写和维护。
但 FakeIt GIT home ( https://github.com/eranpeer/FakeIt ) 表示它不支持 MultipleInheritance,并且我测试的应用程序具有多重继承的代码。我不必支持钻石继承,所以我想知道是否只是多重继承的这一方面不受支持,还是还有其他方面不受支持?
不幸的是,似乎不支持任何类型的多重继承,即使它只是一个统一了其他几个“接口”的“接口”,例如:
struct IA { virtual void a() = 0; };
struct IB { virtual void b() = 0; };
struct IC : public IA, public IB {};
fakeit::Mock<IC> mock; // error :(
Run Code Online (Sandbox Code Playgroud)
(检查是使用 完成的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!
Run Code Online (Sandbox Code Playgroud)