Если вы пишете функцию, которую, как вы знаете, следует протестировать, вы должны разработать ее для тестирования в своей среде.Здесь, если ваше тестирование выполнено на уровне процесса, где вы можете проверить вывод процесса, тогда запись в std :: cout - это нормально.В противном случае вы можете захотеть сделать выходной поток параметром для функции, например:
void unit_test(std::ostream& os = std::cout)
{
os << "Hello" << endl;
}
Затем вы можете проверить его следующим образом:
std::ostringstream oss;
unit_test(oss);
assert(oss && oss.str() == "Hello");
Как это показано,Хорошо протестированное программное обеспечение требует небольшого количества компромиссов ... Требования к тестированию возвращаются к дизайну.
РЕДАКТИРОВАТЬ: если вам необходимо протестировать уже существующие функции, не меняя их, подумайте:
#include <sstream>
#include <iostream>
void f()
{
std::cout << "hello world\n";
}
int main()
{
std::ostringstream oss;
std::streambuf* p_cout_streambuf = std::cout.rdbuf();
std::cout.rdbuf(oss.rdbuf());
f();
std::cout.rdbuf(p_cout_streambuf); // restore
// test your oss content...
assert(oss && oss.str() == "hello world\n";
std::cout << oss.str();
}