2011-06-13 6 views
10

El programa My Ruby lee las líneas de stdin y usa puts para imprimir en stdout (la terminal). ¿Puedo usar RSpec para probar las lecturas y escrituras? ¿Puedo inyectar una cadena a mi programa como si estuviera escrita en stdin y al mismo tiempo verificar la salida?¿Puedo usar RSpec para simular stdin/stdout para probar las lecturas y escrituras de la consola?

line = STDIN.read.chomp.split 

Además, tengo la lectura y escritura en un bucle, hasta que line[0] es "dejar de fumar". ¿Puedo probar mientras el ciclo está en funcionamiento o debo llamar al subject.read_in y al subject.write_out?

Respuesta

16

Puede utilizar simulaciones y hacer que el método se llame más de una vez al enumerar varios valores en el método . Estos serán devueltos, uno en cada llamada, en el orden dado.

STDIN.should_receive(:read).and_return("Your string") 

STDIN.should_receive(:read).and_return("value1", "value2", "value3") 

Se pueden hacer cosas similares con STDOUT:

STDOUT.should_receive(:puts).with("string") 

Véase el RSpec mocking documentation para más información.

+1

Es 'STDOUT.should_receive (: print)' en realidad. – yawn

+0

@yawn Gracias, lo arreglaron. – Jonathan

+0

¿Cómo sabe usar: imprimir o leer ... dónde existe esto en la documentación de "cómo usar RSpec"? en todas partes veo las expectativas de las que nunca había oído hablar (poseo el libro de RSpec). No puedo encontrar un texto definitivo sobre este tema. – thefonso

Cuestiones relacionadas