2011-01-13 13 views
7

Qualcuno sa di una libreria esistente che consente di testare il codice asincrono con OCUnit? Sto pensando a qualcosa come GHAsyncTestCase ma che consegna da SenTestCase.Test di codice asincrono su iOS con OCunit

Sto chiedendo perché se non lo trovo ho intenzione di porting GHAsyncTestCase in OCUnit ma non voglio duplicare il lavoro fatto già da qualcun altro.

+0

Io non conosco nessuno fare questo prima, ma devo chiedere; perché senti la necessità di testare il comportamento asincrono in un framework normalmente utilizzato per eseguire i test unitari? Non ti fidi delle due parti del tuo comportamento? Non puoi testarli separatamente? Stai davvero scrivendo test di integrazione? – Jonah

+0

@Jonah, hai ragione è davvero utile ma a volte sono troppo pigro per prendere in giro l'intero livello di rete. Quindi è davvero allettante eseguire solo un server locale e test di integrazione su di esso. –

risposta

11

Piotr:

Potresti essere interessato al lavoro che ho fatto con Mimic, uno strumento di sradicamento della rete scritta in Ruby che ti permette di stub richieste ad un alto livello e può essere utilizzato dal vostro Objective-C utilizzando l'involucro fornito.

Per quanto riguarda i test asincroni, si prega di dare un'occhiata a una piccola utility che ho scritto chiamato AssertEventually.

This example mostra sia Mimic che assertEventualmente in azione.

Inoltre, si potrebbe voler guardare Kiwi - si tratta di un piccolo framework di test Objective-C costruito su OCUnit. Recentemente ho contribuito una patch per porto il mio comportamento AssertEventually verso Kiwi, che permette di scrivere cose come:

id someObject = nil; 
[do SomethingThatFetchesSomeObjectAsynchronously]; 
[[theObject(&someObject) shouldEventually] equal:@"some result"]; 
+0

È qualcosa che stavo cercando. Mimic sembra piuttosto interessante, lo darò un'occhiata. Grazie! –

+0

Assert Sembra abbastanza utile, ma il collegamento è morto. Qualsiasi aiuto? – AndrewCr

+0

Sto usando Kiwi con il comportamento '-shouldEventually'; voglia di scoprire che è stato il tuo lavoro. Grazie! –

7

AGAsyncTestHelper adotta un approccio leggermente diverso rispetto AssertEventually dal momento che sta valutando l'espressione piuttosto che controllare il puntatore per nuovi risultati. Un vantaggio dell'utilizzo di AGAsyncTestHelper è che può essere utilizzato per blocchi, delegati-callback e quant'altro.

WAIT_WHILE(<expression_to_evaluate>, <max_duration>); 

Rispondendo alla domanda

id someObject = nil; 
[self doSomethingThatFetchesSomeObjectAsynchronously]; 
WAIT_WHILE(self.someObject == nil, 1.0); 
Problemi correlati