У меня есть функция, которая читает пользовательский ввод из std:: cin, и я хочу написать unittest, который вставляет некоторые строки в std:: cin, так что последующее извлечение из std:: cin будет читать эту строку вместо паузы для ввода клавиатуры.
В идеале я бы изменил подпись функции, чтобы передать пользовательский istream в качестве параметров, но я не могу этого сделать, поскольку у меня есть фиксированный интерфейс, который я не могу изменить.
cin.putback() почти то, что я хотел, однако он вставляет только один символ за раз, и он вставляет их в обратном порядке (но я где-то читал, что вернул char, который изначально не был там может быть опасным, хотя на сайте не выясняется, почему). Я попробовал несколько методов для ввода строки в внутренний буфер cin.rdbuf(), но ни один из них не будет работать. Я также рассмотрел возможность использования внешнего тестирования script или создания подпроцесса, однако я бы хотел сначала рассмотреть тест в чистом С++.
Итак, есть ли способ поместить строки в cin? Или вы знаете, как лучше ввести "поддельный ввод с клавиатуры"?