c++ - C++ FakeIt 库多重继承

标签 c++ unit-testing googletest googlemock

我正在比较 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/

相关文章:

c++ - 如何使用 Visual Studio 2005 设置 Google C++ 测试框架 (gtest)

c++ - 如何为非静态容器中的值编写值参数化测试?

c++ - Qt:如何在QTextEdit中设置段落的topMargin

c++ - 为什么这是按值调用,尽管我传递的是指针?

传递具有任意数量参数的任意函数的 C++ 函数

c# - 如何测试 winforms 应用程序

C++ 循环不正确循环

ios - stub 方法返回在单元测试中不起作用

java - 在测试上下文中传递 HTTP 调用

c++ - googleTest 继续测试