2011-01-08 12 views
11

Si tengo una aserción en un unittest.TestCase como se muestra a continuación:Python: ¿puede la unidad mostrar los valores esperados y reales?

self.assertTrue(person.age == 42, "age incorrect") 

Cuando falla, se da el mensaje "era incorrecto". Lo que también me gustaría ver es los valores esperados y reales. ¿Cuál es la mejor manera de hacer esto? ¿Es algo que unittest puede hacer?

EDITAR me gustaría ver algo como:

"era incorrecta: valor esperado 42 valor real 39"

+0

'self.assert' es un error de sintaxis. Te refieres a 'self.assert_'. – delnan

+0

Gracias. Sí, he querido escribir assertTrue ... actualizado. –

Respuesta

8

Se debe utilizar una solución a este problema, como esto:

self.assertEqual(person.age, 42, 'age incorrect: expected value {0} actual value {1}'.format(42, person.age)) 

Pero yo creo que no proporciona las "msg" parámetro es la mejor opción, ya que genera el texto:

first != equal 

La mayoría (*) de las herramientas para ejecutar pruebas también muestran directamente qué línea falló, por lo tanto, usted debería poder entender qué prueba falló y por qué sin usar un mensaje adicional.

(*) leer "todos".

+0

Gracias. No me había dado cuenta de que no agregar el mensaje daba real y esperado. –

+1

Esto viola el principio [DRY] (https://en.wikipedia.org/wiki/Don%27t_repeat_yourself). – Rockallite

+0

@Rockallite ¿Leyó siquiera la respuesta * completa *? Creo que te perdiste todas las líneas excepto las dos primeras. – Bakuriu

5

véase: assertEqual

self.assertEqual(person.age, 42, 'age incorrect') 

o con el mensaje predeterminado (para responder el comentario):

self.assertEqual(person.age, 42) 
+2

Esto no funcionó para mí. Todavía imprimió "edad incorrecta", pero no el valor real, es decir, el valor de persona.age. –

16

puede establecer el atributo longMessage a True

expected_age = 42 
actual_age = person.age # 39 
self.longMessage = True 
self.assertEqual(expected_age, actual_age, 'age incorrect') 

se podrían obtener algo como: referencia

AssertionError: 42 != 39 : age incorrect 

: https://docs.python.org/2/library/unittest.html#unittest.TestCase.longMessage

+0

eso es _exactly_ lo que sentí que debería existir. Excelente respuesta! –

+0

Esta debería ser la respuesta aceptada. Gracias Noel! – DylanYoung

Cuestiones relacionadas