使用谷歌模拟投射模拟对象

时间:2014-03-17 11:26:30

标签: unit-testing casting googlemock

我正在使用谷歌模拟框架对我的代码执行一些单元测试。我有一个名为SerialPortManager的类,其构造函数为:

SerialPortManager(SerialPortFactoryInterface* serialPortFactory,SerialParserInterface* serialParsers[PORT_COUNT]);

为了执行测试,我有以下测试夹具

class SerialPortManagerTest: public testing::Test {
protected:
SerialPortManager* manager;
MockSerialPortFactory *portFactory;
SerialParserInterface *parsers[PORT_COUNT];

virtual void SetUp() {
    portFactory = new MockSerialPortFactory();
    for (int i = 0; i < PORT_COUNT; i++) {
        parsers[i] = new MockSerialParser();
    }
    manager = 0;
}

现在,在我的一个测试中,我需要对其中一个模拟的SerialParsers设置期望。我试着这样做

EXPECT_CALL(*parsers[0], GetPendingCommands()).Times(1);

但是我得到了

 Method 'gmock_GetPendingCommands' could not be resolved

¿有没有办法将SerialParserInterface指针强制转换为模拟类型?

1 个答案:

答案 0 :(得分:0)

通过强制转换构造函数的参数来解决。我将解析器数组声明为MockSerialParser *解析器[PORT_COUNT],我将数组对象实例化为MockSerialParser *,然后将数组作为manager = new SerialPortManager(portFactory,(SerialParserInterface **)解析器)传递给构造函数;