2010-08-09 17 views
7

Posso chiamare un metodo di test dalla classe di test in python? Ad esempio:metodi unittest python

 

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

    def test1(self): 
     self.test2() 

    def test2(self): 
     #do stuff 
 

aggiornamento: ho dimenticato l'altra metà della mia domanda. Il setup o il teardown verrà chiamato solo dopo il metodo che il tester chiama? O verrà chiamato tra test1 che entra e dopo aver chiamato test2 da test1?

+1

Sì ... presumo che ci sia di più nella tua domanda, forse potresti elaborare? – Seth

risposta

6

Provare a eseguire il seguente codice:

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() 

E il risultato è:

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

OK 

Ora si vede, setUp ottenere chiamato prima di un metodo di prova ottenere chiamato da unittest, e tearDown è chiamato dopo la chiamata.

+0

Scelti per fare ciò che avrei dovuto fare – Falmarri

1

Tutti i metodi il cui nome inizia con la stringa 'test' sono considerati test di unità (ovvero vengono eseguiti quando si chiama unittest.main()). Quindi puoi chiamare i metodi dalla classe Test, ma dovresti nominarlo qualcosa che non inizia con la stringa 'test' a meno che tu non voglia che venga eseguito anche come test unitario.

0

sicuro, perché no - tuttavia ciò significa che test2 verrà chiamato due volte - una volta da test1 e poi di nuovo come test proprio, poiché verranno chiamate tutte le funzioni denominate test.

+0

Penso che la risposta dovrebbe essere "Tecnicamente sì, ** ma non **." Inoltre, penso che vogliano ereditarietà tra i loro casi di test, non la delega. –

+0

Mi stavo chiedendo se fare questo avrebbe causato un errore nella classe di test nel numero di test eseguiti o solo qualcosa di strano come quello – Falmarri

0

Sì per entrambi:

  • setUp sarà chiamato tra una prova e
  • test2 sarà chiamato due volte.

Se si desidera chiamare una funzione all'interno di un test, omettere il prefisso test.

8

Questo è praticamente un Non farlo. Se si desidera eseguire test in un ordine specifico, definire un metodo runTest e non denominare i metodi test....

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

Questo eseguirà i passaggi in ordine con un (1) setUp e uno (1) tearDown. Nessun mistero

Problemi correlati