CPP FakeIt库多重继承

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,并且我测试的应用程序具有多重继承的代码。我不必支持钻石继承,所以我想知道是否只是多重继承的这一方面不受支持,还是还有其他方面不受支持?

Mic*_*zky 3

不幸的是,似乎不支持任何类型的多重继承,即使它只是一个统一了其他几个“接口”的“接口”,例如:

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)