2013-08-05 17 views
9

Esiste una differenza logica runtime tra questi due metodi? O qualche differenza di gusto?
In caso contrario, dovrei dimenticarmi di __init__ e utilizzare solo setUpClass pensando qui a classi di unittests come su spazi dei nomi invece del paradigma OOP della lingua?Quando dovrei usare setUpClass e quando __init__?

risposta

11

I due sono piuttosto diversi.

setUpClass è un metodo di classe, per uno, quindi ti lascio solo si imposta classe attributi.

Sono anche chiamati in momenti diversi. Il test runner crea una nuova istanza per ogni test. Se la classe di test contiene 5 metodi di test, vengono create 5 istanze e __init__ viene chiamato 5 volte.

setUpClass viene normalmente chiamato solo una volta. (Se si mescola l'ordine del test ei metodi di test di classi diverse sono mescolati, setUpClass può essere chiamato più volte, usare tearDownClass per pulire correttamente e questo non sarà un problema).

Inoltre, un test runner di solito crea tutte le istanze di test all'inizio dell'esecuzione del test; questo è normalmente economico, in quanto le istanze di test non mantengono (molto) lo stato, quindi non occuperanno molta memoria.

Come regola generale, è necessario non utilizzare __init__ affatto. Utilizzare setUpClass per creare lo stato condiviso tra tutti i test e utilizzare setUp per creare lo stato per test. setUp viene chiamato appena prima dell'esecuzione di un test, pertanto è possibile evitare di accumulare molto spazio in memoria fino a quando non è necessario per un test, e non prima.

Problemi correlati