2016-03-30 4 views
1

Я издевался над виртуальным методом, возвращающим istream&. Я бы хотел использовать его в тестовой папке. Как вернуть некоторую ценность?Как издеваться над методом возврата 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

Как вы назначая возвращаемое значение? –

+1

Скажите, что его брюки вышли из моды. Можете ли вы показать, что вы пробовали, и что пошло не так, в [MCVE]? – Yakk

+0

Я отредактировал сообщение. – peter55555

ответ

2

Вообще-то я бы просто вернуть входной поток строку, которая у меня есть контроль над. Таким образом, я могу подталкивать к нему ожидаемые значения. Вдоль этих линий:

std::istringstream myStream{"This is expected content"}; 
mocks::MyMockClass mockClass{myStream}; 

Тогда в вашем методе:

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

EDIT: Для насмешливый рамки я бы ожидать, что вы должны быть в состоянии сделать что-то вроде этого (медведь в убежище ума I» т используется Google Mocks, так что я полностью выдумываю)

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

ТАКЖЕ: Вы должны назначить его к ссылке:

std::istream& a = doTheMockedAction(); 
+0

Спасибо, ваше решение в порядке. Но мне нужно вернуть разные значения. Возможно ли сделать что-то подобное внутри WillOnce (...)? Просто чтобы вернуть объект std :: istringstream'? Например, я хочу вернуться в локальную локальную тестовую проверку: std :: istringstream xxx ("xxx"). Является ли это возможным? – peter55555

+1

@ peter55555 Я не использовал 'gmock', поэтому не могу сказать наверняка, но обычно макетная структура позволит вам вернуть какой-либо подкласс возвращаемой ссылки. Так, например, я бы ожидал, что вам должно быть позволено делать что-то в соответствии с тем, что я добавил к основному ответу выше (см. Править) – Dennis

+0

@downvoter. Обычно принято оставлять комментарий о том, что вы считаете неправильным с ответом, если вы голосуете вниз. – Dennis

Смежные вопросы