如何模拟方法返回istream&?

时间:2016-03-30 11:51:41

标签: c++ c++11 istream gmock

我已经模拟了返回istream&的虚方法。我想在测试用例中使用它。如何返回一些价值?

问题是istream是不可复制的。

我尝试这样的事情:

TEST(x, y)
{
     MockClass mock;
     std::istringstream str("Some text");

     EXPECT_CALL(mock, m(_)).WillOnce(Return(str)); // m method returns std::istream&

     sut.callMethod();
}

2 个答案:

答案 0 :(得分:5)

您应该使用ReturnRef()而不是Return()。请参阅gmock备忘单:

https://github.com/google/googlemock/blob/master/googlemock/docs/v1_6/CheatSheet.md

答案 1 :(得分:2)

通常我只会返回一个我可以控制的字符串输入流。这样我就可以将期望值推入其中。沿着这些方向:

std::istream& doTheMockedAction(){
    return myStream;
}

然后在你的方法中:

auto mockOfRealType = MOCK_CLASS<RealType>();
EXPECT_CALL(mockOfRealType, doTheMockedAction()).WillOnce(ReturnRef(myStream))

编辑: 对于一个模拟框架,我希望你能够做到这样的事情(记住我没有使用谷歌模拟,所以我完全做到了这一点)

std::istream& a = doTheMockedAction();

ALSO: 您需要将其分配给参考:

Array
(
    [pole] => Array
        (
            [0] => Array
                (
                    [nazev_1] => Název_1_1
                    [nazev_2] => Název_1_2
                )

            [1] => Array
                (
                    [nazev_1] => Název_2_1
                    [nazev_2] => Název_2_2
                )