2015-11-10 5 views
3

Я сравниваю GoogleMock и FakeIt для написания модульных тестов. Мне нравится FakeIt над GoogleMock, потому что я из фона Java, а FakeIt близок к синтаксису Mockito/JMock, который упрощает работу с библиотекой &.CPP FakeIt библиотека множественное наследование

Но FakeIt GIT home (https://github.com/eranpeer/FakeIt) говорит, что он не поддерживает MultipleInheritance, а тестирование приложения im имеет код с множественным наследованием. Мне не нужно поддерживать наследование алмазов, поэтому я хотел бы знать, не поддерживает ли этот аспект множественного наследования, а также другие аспекты, которые не поддерживаются?

ответ

1

К сожалению, кажется, что любого типа множественного наследования не поддерживается, даже если это просто «интерфейс», который объединяет несколько других «интерфейсов», например:

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!