2010-08-09 15 views
7

¿Puedo llamar a un método de prueba desde dentro de la clase de prueba en python? Por ejemplo:métodos python unittest

 

class Test(unittest.TestCase): 
    def setUp(self): 
     #do stuff 

    def test1(self): 
     self.test2() 

    def test2(self): 
     #do stuff 
 

actualización: Olvidé la otra mitad de mi pregunta. ¿Se llamará a la configuración o al desmontaje solo después del método que el probador llama? ¿O se llamará entre test1 entrar y después de llamar test2 desde test1?

+1

Sí ... Supongo que hay más en su pregunta, ¿tal vez podría dar más detalles? – Seth

Respuesta

6

intente ejecutar el siguiente código:

import unittest 

class Test(unittest.TestCase): 
    def setUp(self): 
     print 'Setting Up' 

    def test1(self): 
     print 'In test1' 
     self.test2() 

    def test2(self): 
     print 'In test2' 

    def tearDown(self): 
     print 'Tearing Down' 

if __name__ == '__main__': 
    unittest.main() 

Y los resultados es:

Setting Up 
In test1 
In test2 
Tearing Down 
.Setting Up 
In test2 
Tearing Down 
. 
---------------------------------------------------------------------- 
Ran 2 tests in 0.000s 

OK 

Ahora ves, setUp ser llamado antes de un método de prueba serán llamadas por unittest, y tearDown es llamado después de la llamada.

+0

Elegido para hacer lo que debería haber hecho – Falmarri

1

Todos los métodos cuyo nombre comienza con la cadena 'test' se consideran pruebas unitarias (es decir, se ejecutan al llamar al unittest.main()). Entonces puede llamar a métodos desde la clase Test, pero debe nombrar algo que no comience con la cadena 'test' a menos que desee que también se ejecute como una prueba unitaria.

0

seguro, por qué no, sin embargo eso significa que se llamará a test2 dos veces, una vez por test1 y luego otra vez como su propia prueba, ya que se llamarán todas las funciones llamadas test.

+0

Creo que la respuesta debería ser "Técnicamente sí, ** pero no **". Además, creo que quieren herencia entre sus casos de prueba, no delegación. –

+0

Me preguntaba si al hacer esto, la clase de prueba se equivocaría en la cantidad de pruebas que se ejecuta o simplemente algo extraño – Falmarri

0

sí a ambas:

  • setUp se llamará entre cada prueba
  • test2 se llamará dos veces.

Si desea llamar a una función dentro de una prueba, omita el prefijo test.

8

Esto es más o menos No hagas eso. Si desea que las pruebas se ejecuten en un orden específico, defina un método runTest y no denomine sus métodos test....

class Test_Some_Condition(unittest.TestCase): 
def setUp(self): 
    ... 
def runTest(self): 
    step1() 
    step2() 
    step3() 
def tearDown(self): 
    ... 

Esto ejecutará los pasos en orden con un (1) setUp y un (1) tearDown. Sin misterio

Cuestiones relacionadas