2010-09-02 16 views
11

Sto usando SenTest in XCode per i miei test di unità. Devo eseguire un'attività da riga di comando per testare i miei test unitari. Posso farlo nel + metodo di inizializzazione della mia classe di test (sottoclasse di SenTestCase, ovviamente).SenTestKit: pulizia dopo che TUTTI i test sono stati eseguiti?

Vorrei terminare l'attività della riga di comando al termine dei test. Poiché non c'è un opposto di + inizializza, sono perplesso.

C'è un modo per sottoclasse una classe SenTest per fare ciò che sto trascurando?

risposta

36

Non eseguire lo strumento da riga di comando in + initialize. Viene inviato dal runtime Objective-C quando viene inviato per la prima volta alla classe qualsiasi messaggio.

Invece, eseguire lo strumento da riga di comando nel metodo +setUp del test. (Si noti che in realtà volevo +setUp e non -setUp;. Un sacco di persone sembrano essere un po 'sfocata sulla differenza tra i metodi di classe e istanza)

In questo caso, unsetUp metodo di classe viene invocato da OCUnit prima qualsiasi di test in una sottoclasse SenTestCase gestiscono, e un metodo classetearDown viene richiamato dal OCUnit dopo tutti prove in una corsa ar SenTestCase sottoclasse.

Quindi il flusso globale per una particolare SenTestCase sottoclasse è:

  • invia +setUp a SomeTestCase
  • per ogni test metodo partire SomeTestCase (chiamare test___)
    • creare una nuova istanza di SomeTestCase
    • invia -setUp ad esso
    • inviare -test___ ad esso
    • inviare -tearDown ad esso
    • rilascio è
  • inviare +tearDown a SomeTestCase

In questo modo se si ha qualcosa che deve essere fatto prima di tutti i tuoi -test metodi eseguiti, o qualcosa che deve essere fatto dopo tutti i tuoi metodi -test, c'è un punto deterministico a wh che puoi farlo accadere (Piuttosto che basarsi sulla gestione della memoria, che non è deterministica allo stesso modo e potrebbe non essere affatto deterministica se si utilizza GC.)

+2

Non avevo trovato nulla che parlasse dei metodi + setUp/+ teardown. Grazie per l'illuminazione. – Mel

0

Si dovrebbe guardare Google Toolbox for Mac o il suo derivato ulteriore GHUnit. Entrambi (penso) forniscono almeno un setup a livello di classe. Se vuoi veramente eseguire una riga di comando prima di eseguire tutti i test e poi eseguire una seconda riga di comando (forse per uccidere il primo) dopo l'esecuzione dei test, modifico la fase di generazione dello script della shell che esegue i test di unità (l'ultimo passaggio nelle fasi di costruzione di un obiettivo del pacchetto UnitTest).

+4

Non è necessario alcun framework aggiuntivo per l'installazione e il teardown a livello di classe; questi fanno parte di OCUnit. –

Problemi correlati