2012-02-29 5 views
5

Estoy usando unittest.TestCase para escribir casos de prueba para mi aplicación django (que es esencialmente la misma unittest.TestCase de python). Cada vez que falla un método de prueba, obtengo la explicación del mismo en el siguiente formato. ¿Hay alguna manera de que pueda agregar mensajes personalizados/depuración a la salida del método de prueba fallido?¿Alguna forma de agregar un mensaje personalizado/de depuración a los detalles del método de prueba fallido de python/django unittest.TestCase?

====================================================================== 
FAIL: test_bad_votes (polls.tests.views.PollsViewsTestCase) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "/home/colinh/Development/tutorials/guide-to-testing-in-django/polls/tests/views.py", line 66, in test_bad_votes 
    self.assertEqual(resp.context['form']['choice'].errors, [u'This field is required.']) 
AssertionError: [] != [u'This field is required.'] 

Respuesta

7

En general, desea heredar a partir de Django unittest TestCase clase, que se puede obtener mediante la importación de django.test. Dicho esto, puede pasar un argumento de msg a lo que sea que intente evaluar, que contenga el mensaje de error.

He aquí un ejemplo de Humanización:

class HumanizeTests(TestCase): 

    def humanize_tester(self, test_list, result_list, method): 
     # Using max below ensures we go through both lists 
     # However, if the lists are not equal length, this raises an exception 
     for test_content, result in zip(test_list, result_list): 
      t = Template('{%% load humanize %%}{{ test_content|%s }}' % method) 
      rendered = t.render(Context(locals())).strip() 
      self.assertEqual(rendered, escape(result), 
         msg="%s test failed, produced '%s', should've produced '%s'" %  (method, rendered, result)) 

Obviamente, la suya no tiene que ser similar a la anterior, pero se puede ver el argumento msg en acción.

+3

Si comprueba la definición de la función 'assertEqual', puede ver que acepta el argumento msg' def assertEqual (self, first, second, msg = None): ' –

Cuestiones relacionadas