2012-06-20 8 views
14

desea escribir unittest -Los casos para una función de esa manera:¿Cómo probar las declaraciones de impresión?

def test_me(a): 
    for b in c: 
     print do_something(a,b) 

Al principio pensé en simplemente recoger las salidas de do_something en una cadena y luego devolverlo, para imprimir y poner a prueba toda la salida juntos. Pero no siempre es conveniente porque esos bucles pueden hacer que su cadena de búfer sea muy grande, dependiendo de las circunstancias. Entonces, ¿qué puede hacer para probar la salida, cuando se imprime y no se devuelve?

+1

¿Ayuda? http://stackoverflow.com/questions/5136611/capture-stdout-from-a-script-in-python –

+1

Utilice la instrucción 'yield'? –

+0

@dos comentarios anteriores: no sé cuál es un enfoque típico para la prueba unitaria, ambos podrían ser posibles. – erikbwork

Respuesta

12

print imprime a sys.stdout, que puede reasignar a su propio objeto si lo desea. Lo único que necesita su objeto es una función write que toma un solo argumento de cadena.

Como Python 2.6 también puede cambiar print a ser una función en lugar de una construcción del lenguaje mediante la adición de from __future__ import print_function a la parte superior de la secuencia de comandos. De esta forma puede anular print con su propia función.

Cuestiones relacionadas