2013-06-07 9 views
13

Quando creo un unittest.TestCase, posso definire una funzione setUp() che verrà eseguita prima di ogni test in quel caso di test. È possibile saltare lo setUp() per un singolo test specifico?È possibile saltare setUp() per un test specifico in Python's unittest?

È possibile che saltare un valore di setUp() per un determinato test non sia una buona pratica. Sono abbastanza nuovo per i test unitari e qualsiasi suggerimento riguardante l'argomento è benvenuto.

+0

Un caso di utilizzo di esempio: Sono in grado di testare un'applicazione che utilizza un'API esterna. Quasi tutti i metodi richiedono 'setUp()' per autenticarsi con il server, tranne se sto testando la funzione 'login()' stessa. –

+0

Correlato a [softwareengineering.se]: [* È possibile che i metodi di installazione e cancellazione vengano eseguiti solo per specifici attivatori? *] (Https://softwareengineering.stackexchange.com/q/232243/168744) –

risposta

8

Dal docs (il corsivo è mio):

unittest.TestCase.setUp()

metodo chiamato per preparare il dispositivo di prova. Questo è chiamato immediatamente prima di chiamare il metodo di prova; qualsiasi eccezione sollevata da questo metodo verrà considerato un errore piuttosto che un errore di test. L'implementazione predefinita non fa nulla.

Quindi, se non è necessario alcun set up, non eseguire l'override di unittest.TestCase.setUp.

Tuttavia, se uno dei tuoi metodi test_* non ha bisogno della configurazione e gli altri lo fanno, ti consiglio di inserirlo in una classe separata.

+1

credo @ 7hi4g0 ha 5 test e, tra questi 5 test, non vuole che il setup funzioni su uno di essi. INVECE di scrivere due test separati, uno con il setup uno senza – TehTris

+0

@TehTris: In tal caso, dovrebbe essere un caso di test separato e non mescolato con gli altri. –

+0

sono d'accordo al 100%, ma sono sicuro che ci sia almeno una ragione legittima là fuori per questo essere in grado. – TehTris

6

In setUp(), self._testMethodName contiene il nome del test che verrà eseguito. È probabile che sia meglio mettere il test in una classe diversa o qualcosa del genere, ovviamente, ma è lì dentro.

Problemi correlati