2010-04-05 17 views
21

Si hay varios métodos en la clase de prueba, encontré que el orden de ejecución es alfabético. Pero quiero personalizar el orden de ejecución. ¿Cómo definir el orden de ejecución?Django TestCase orden de prueba

Por ejemplo: testTestA se cargará primero que testTestB.

class Test(TestCase): 
    def setUp(self): 
     ... 

    def testTestB(self): 
     #test code 

    def testTestA(self): 
     #test code 

Respuesta

42

Un principio de las pruebas unitarias es que cada prueba debe ser independiente de todas las demás. Si, en su caso, el código en testTestA debe venir antes testTestB, entonces se podría combinar ambos en una sola prueba:

def testTestA_and_TestB(self): 
    # test code from testTestA 
    ... 
    # test code from testTestB 

o, tal vez mejor sería

def TestA(self): 
    # test code 
def TestB(self): 
    # test code 
def test_A_then_B(self): 
    self.TestA() 
    self.TestB() 

La clase Test sólo prueba los Los métodos cuyo nombre comienza con una minúscula test.... Para que pueda agregar métodos adicionales de ayuda TestA y TestB que no se ejecutarán a menos que los llame explícitamente.

+6

+1: He hecho esto más de una vez para encadenar pruebas juntas, reduciendo el tiempo de configuración. –

10

Por lo que yo sé, no hay forma de solicitar pruebas que no sean cambiarles el nombre. ¿Podría explicar por qué necesita ejecutar casos de prueba en el orden específico? En las pruebas unitarias generalmente se considera una mala práctica ya que significa que sus casos no son independientes.

+0

Como, para las pruebas crear una cuenta y todas las siguientes operaciones en la cuenta. ¿Cuál podría ser la alternativa a este enfoque? – zsong

+0

@ziang: La idea es que solo pruebe * una * operación. Si desea probar operaciones en una cuenta, cree una cuenta ficticia, luego realice una operación y verifique. Haga esto una vez para cada operación para probar, que le da una prueba por operación. – sleske

+0

Ya veo. Gracias por su sugerencia. – zsong

5

Para actualizar sobre el tema (de documentación):

Order in which tests are executed

Con el fin de garantizar que toda TestCase código comienza con una base de datos limpia , el corredor de prueba Django reordena las pruebas en el De la siguiente manera:

  • Todas las subclases TestCase se ejecutan primero.
  • A continuación, todos los demás pruebas basadas en Django (casos de prueba basados ​​en SimpleTestCase, incluyendo TransactionTestCase) se ejecutan sin ningún orden particular garantizada ni aplican entre ellos.
  • Luego se ejecuta cualquier otra prueba unittest.TestCase (incluyendo doctests) que puede alterar la base de datos sin restaurarlo a su estado original.

Nota: El nuevo orden de las pruebas puede revelar dependencias inesperados en la prueba caso de pedidos. Este es el caso con doctests que dependían del estado que queda en la base de datos mediante una prueba dada TransactionTestCase, deben estar actualizados para poder ejecutar de forma independiente.

Cuestiones relacionadas