Я пытаюсь перехватить стандартный вывод в начале каждого отдельного теста, и если тест не пройден, только после этого вывести стандартный вывод. Мне нужно, чтобы это выполнялось для каждого TEST и TEST_F в каталоге, поэтому я смотрю, могу ли я применить глобальное тестовое приспособление, если это возможно, к основному.
Я могу применить глобальную среду, но она запускается при настройке и демонтаже тестера. И я могу добиться этого, добавив код к каждому из моих многочисленных стандартных тестовых приборов, но я надеялся на глобальное решение, а не на изменение каждого прибора.
struct dummyFixture : public ::testing::Test
{
// --- Need to apply this globally ---
void SetUp()
{
backup = std::cout.rdbuf();
std::cout.rdbuf(testingSink.rdbuf());
}
void TearDown()
{
std::cout.rdbuf(backup);
if (::testing::Test::HasFailure())
std::cout << testingSink.str() << std::endl;
testingSink.str(std::string());
}
private:
std::stringstream testingSink;
std::streambuf *backup;
};
TEST(dummyTest, test_pass)
{
// should not print log to console
std::cout << "DUMMY TEST" << std::endl;
EXPECT_TRUE(true);
}
TEST_F(dummyFixture, test_fail)
{
// should print log to console
std::cout << "DUMMY TEST FIXTURE" << std::endl;
EXPECT_TRUE(false);
}
int main(int argc, char **argv)
{
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}