Если у вас есть доступ к исходному коду функции, которая вызывает std::getline
, то самое простое решение - переписать его в качестве оболочки другой функции с такой же сигнатурой и реализацией, но с дополнительным параметром std::istream&
, который используется вместо std::cin
. Например, если у вас есть:
my_struct my_func()
{
//...
std::getline(std::cin, in);
//...
}
Затем переписать так:
my_struct my_func(std::istream& is);
inline my_struct my_func()
{
return my_func(std::cin);
}
my_struct my_func(std::istream& is)
{
//...
std::getline(is, in);
//...
}
Таким образом, вы сможете проверить функциональность ядра my_func
на сконструированных входных последовательностях, передав std::istringstream
объекты в my_func(std::istream&)
.
Если у вас нет доступа к исходному коду функции, которая вызывает std::getline
, то один из приемов, который вы можете использовать, - заменить стандарт в дескрипторе. См. этот ответ для кода, который заменяет стандартный дескриптор out и соответственно изменяет его.