C++ 如何模拟返回istream&;的方法;?

C++ 如何模拟返回istream&;的方法;?,c++,c++11,istream,gmock,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.callMet

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

通常,我会简单地返回一个我可以控制的字符串输入流。这样我就可以把期望值推到它里面。按照这些思路:

std::istringstream myStream{"This is expected content"};
mocks::MyMockClass mockClass{myStream};
然后在您的方法中:

std::istream& doTheMockedAction(){
    return myStream;
}
编辑: 对于mocking框架,我希望您能够做类似的事情(请记住,我没有使用googlemocks,所以我完全是在编造)

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


如何分配返回值?告诉它它的裤子已经过时了。你能用一个简单的例子来说明你尝试了什么,出了什么问题吗?你到底遇到了什么问题?我假设编译错误,因为在google mock中,您不能使用Return()进行引用。您还可以添加'sut'对象的详细信息。谢谢,您的解决方案还可以。但是我需要返回不同的值。有没有可能在WillOnce(…)里面做这样的事情?只是为了返回我的std::istringstream`对象?例如,我想返回test:std::istringstream xxx(“xxx”)中本地定义的值。有可能吗?@peter55555我没有使用
gmock
,所以我不能确定,但通常模拟框架允许您返回返回的引用的任何子类。例如,我希望你可以按照我在上面的主要答案(见编辑)中添加的内容做一些事情@downvoter如果你投了反对票,通常会对你认为答案有错的地方发表评论。
auto mockOfRealType = MOCK_CLASS<RealType>();
EXPECT_CALL(mockOfRealType, doTheMockedAction()).WillOnce(ReturnRef(myStream))
std::istream& a = doTheMockedAction();