如何模拟方法返回 istream&?
How to mock method returning istream&?
我模拟了虚拟方法 returning istream&
。我想在测试用例中使用它。如何return一些值?
问题是 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();
}
通常我会简单地 return 一个我可以控制的字符串输入流。这样我就可以将预期值推入其中。按照这些思路:
std::istringstream myStream{"This is expected content"};
mocks::MyMockClass mockClass{myStream};
然后在你的方法中:
std::istream& doTheMockedAction(){
return myStream;
}
编辑:
对于一个模拟框架,我希望你应该能够做这样的事情(记住我没有使用 Google Mocks 所以我完全弥补了这一点)
auto mockOfRealType = MOCK_CLASS<RealType>();
EXPECT_CALL(mockOfRealType, doTheMockedAction()).WillOnce(ReturnRef(myStream))
还有:
您需要将其分配给参考:
std::istream& a = doTheMockedAction();
您应该使用 ReturnRef() 而不是 Return()。参考gmock作弊sheet:
https://github.com/google/googletest/blob/master/docs/gmock_cheat_sheet.md#returning-a-value
我模拟了虚拟方法 returning istream&
。我想在测试用例中使用它。如何return一些值?
问题是 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();
}
通常我会简单地 return 一个我可以控制的字符串输入流。这样我就可以将预期值推入其中。按照这些思路:
std::istringstream myStream{"This is expected content"};
mocks::MyMockClass mockClass{myStream};
然后在你的方法中:
std::istream& doTheMockedAction(){
return myStream;
}
编辑: 对于一个模拟框架,我希望你应该能够做这样的事情(记住我没有使用 Google Mocks 所以我完全弥补了这一点)
auto mockOfRealType = MOCK_CLASS<RealType>();
EXPECT_CALL(mockOfRealType, doTheMockedAction()).WillOnce(ReturnRef(myStream))
还有: 您需要将其分配给参考:
std::istream& a = doTheMockedAction();
您应该使用 ReturnRef() 而不是 Return()。参考gmock作弊sheet:
https://github.com/google/googletest/blob/master/docs/gmock_cheat_sheet.md#returning-a-value