модульный тест с использованием gtest 1.6: как проверить, что распечатано?

Как проверить функцию void, которая выводит что-то в командную строку?

Например:

void printFoo() {
                 cout << "Successful" < endl;
             }

а затем в test.cpp я помещаю этот тестовый пример:

TEST(test_printFoo, printFoo) {

    //what do i write here??

}

пожалуйста, объясните четко, так как я новичок в модульном тестировании и gtest. Спасибо


person hydradon    schedule 20.09.2013    source источник


Ответы (1)


Вам придется изменить свою функцию, чтобы сделать ее проверяемой. Самый простой способ сделать это — передать ostream (который наследует cout) функции и использовать строковый поток (также наследует ostream) в ваших модульных тестах.

void printFoo( std::ostream &os ) 
{
  os << "Successful" << endl;
}

TEST(test_printFoo, printFoo) 
{
  std::ostringstream output;

  printFoo( output );

  // Not that familiar with gtest, but I think this is how you test they are 
  // equal. Not sure if it will work with stringstream.
  EXPECT_EQ( output, "Successful" );

  // For reference, this is the equivalent assert in mstest
  // Assert::IsTrue( output == "Successful" );
}
person Kindread    schedule 20.09.2013
comment
Вероятно, вы имели в виду os << "Successful" < endl; - person jupp0r; 22.01.2014
comment
вывод в EXPECT_EQ должен вызывать .str() для сравнения со строкой Successful, например. EXPECT_EQ( output.str(), "Successful" ); - person Kdawgwilk; 23.03.2017