Tengo una función que lee la entrada de usuario de std :: cin, y quiero escribir una prueba de unidad que inserte algunas cadenas en std :: cin, de modo que la extracción posterior de std :: cin lee esa cadena en lugar de hacer una pausa para ingresar el teclado.Inyectando cadena a 'cin'
Idealmente, cambiaría la firma de la función para poder pasar una istream personalizada como parámetros, pero no puedo hacer eso porque tengo una interfaz fija que no puedo cambiar.
cin.putback() es casi lo que quería, sin embargo, es la inserción de un solo carácter a la vez, y les está insertando en orden inverso (pero he leído en alguna parte que volver a poner carbón que no era originalmente puede haber peligro, aunque el sitio web no explica por qué). He intentado varios métodos para inyectar la cadena al buffer interno de cin cin.rdbuf(), pero ninguno funcionaría tampoco. También consideré usar un script de prueba externo o crear un subproceso; sin embargo, me gustaría primero considerar una prueba en C++ puro.
Entonces, ¿hay algún método para poner cadenas en cin? ¿O conoces una forma mejor de inyectar mi "entrada de teclado falso"?
+1. o 'stringbuf sb (" testdata "); streambuf * backup = cin.rdbuf (&sb);). Es compatible, y razonablemente portátil, pero no es una buena práctica. Ah sí, y podría tener que hacer 'cin.clear()' para escapar de la condición EOF una vez que se ha agotado la entrada : vP. – Potatoswatter
+1 exactamente lo que pedí (Todavía me estoy preguntando personalmente, si hacer algo como esto es una buena idea, incluso para un código de prueba de la caja blanca). –