我已经模拟了返回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();
}
答案 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
)