Injecting string to 'cin'

Ich habe eine Funktion, die Benutzereingaben von std :: cin liest, und ich möchte einen unittest schreiben, der einige Zeichenfolgen in std :: cin einfügt, sodass beim späteren Extrahieren von std :: cin diese Zeichenfolge gelesen wird, anstatt für die Tastatur anzuhalten Eingang

Idealerweise würde ich die Funktionssignatur ändern, damit ich einen benutzerdefinierten Istream als Parameter übergeben kann, aber ich kann das hier nicht tun, da ich eine feste Schnittstelle habe, die ich nicht ändern kann.

cin.putback () istfas was ich wollte, es wird jedoch immer nur ein Zeichen gleichzeitig eingefügt und es wird in umgekehrter Reihenfolge eingefügt (aber ich habe irgendwo gelesen, dass das Zurücksetzen von Zeichen, die ursprünglich nicht dort waren, gefährlich sein kann, obwohl die Website nicht ausführlich ist Warum). Ich habe mehrere Methoden ausprobiert, um die Zeichenfolge in den internen Puffer cin.rdbuf () von cin zu injizieren, aber auch keine würde funktionieren. Ich habe auch überlegt, ein externes Testskript zu verwenden oder einen Unterprozess zu erstellen. Ich möchte jedoch zunächst einen Test in reinem C ++ in Betracht ziehen.

Also, gibt es eine Methode, um Strings in cin zu setzen? Oder kennen Sie einen besseren Weg, um meine "falsche Tastatureingabe" zu injizieren?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage