2016-02-23 3 views
1

Как насмехаться std::istream? Я имею в виду точно оператор >>. Мой проверенный объект, считывающий два числа из этого потока (std::istream& является членом этого класса). Как я могу проверить его? Как читать эти значения в тесте?Как проверить чтение класса из std :: istream?

Я бы хотел проверить эти значения или просто прочитать только определенные значения теста, чтобы продолжить тестирование.

Я использую gmock.

+3

Попробуйте 'зЬй :: stringstream', поток, который записывает/считывает данные из основной 'std :: string' – milleniumbug

+0

@milleniumbu Что значит? Как я могу использовать его в тесте? – peter55555

+2

@ peter55555 Создайте 'istringstream', содержащие значения, которые вы хотите проверить. Сделайте класс прочитанным из этого потока. Испытай, если все пойдет так, как ожидалось. –

ответ

3

Используйте инъекцию зависимости, чтобы передать объект класса std::istringstream на ваш объект. Создайте конструктор для вашего класса, который принимает дополнительный параметр std::istream & и назначает его вашему члену этого типа. Например:

MyClass 
{ 
public: 
    MyClass(std::istream &stream, /* other constructor args */) : 
     stream_(stream) 
    { 
     ... 
    } 

    ... 

    void my_method() 
    { 
     int i, j; 
     stream_ >>i; 
     stream_ >>j; 
     ... 
    } 

private: 
    std::istream stream_; 
}; 

Затем, в тесте, просто создать istringstream объект и передать его в конструктор:

std::istringstream dummyStream("10 20"); 
MyClass obj(dummyStream, /* other constructor args */); 
Смежные вопросы