2011-12-09 13 views
6

Sto avendo un problema molto subdolo in Xcode e il suo "Log Navigator".OCUnit non funziona, ma Xcode Log Navigator dice No Problemi

Ho ricreato il problema in questo modo; Ho un test molto semplice OCUnit:

-(void)testSimpleFailure{ 

    STFail(@"Please fail!"); 
} 

pulisco la mia generazione, io edificherò la mia sistema di prove, ed eseguire i miei test.

Nella finestra della console di output vedo tutti i miei test eseguiti, compreso quello in alto. La console visualizza il test in realtà ha funzionato e non è riuscito:

##teamcity[testFailed name='-|[SimpleTestClassTests.testSimpleFailure|]' message='Please fail!' details=''] 

TUTTAVIA, Xcode mostra il "Test overlay Riuscito" e la "Log Navigator" a sinistra dice che non ci sono problemi e tutto è verde.

Qualcun altro ha avuto un problema simile? Qualcuno sa come risolvere questo?

Mi piacerebbe molto non ottenere un falso positivo prima di commettere.

Modificato per chiarire la mia domanda.

risposta

11

Sto eseguendo i miei test delle applicazioni e unit test su un dispositivo. Sto ottenendo gli stessi risultati - i test non funzionano ma Log Navigator dice che tutto passa. Non solo, non posso impostare i breakpoint nel mio codice.

La soluzione per me era "Modifica schema ...", scelto lo schema "Test" e cambio il mio debugger da "LLDB" a "GDB". Sto usando Xcode 4.3.2, con il mio compilatore impostato per tutti gli obiettivi su LLVM 3.1

Dopo aver modificato il mio debugger per lo schema di test su GDB, Log Navigator segnala i fallimenti di test e posso impostare i breakpoint e il debug come bene mentre i test sono in corso.

link: ricerca per "Prove di unità incidente prima di eseguire qualsiasi codice" (LLDB bug) https://github.com/kstenerud/iOS-Universal-Framework

+2

Se potessi darti più voti, lo farei. Ho passato tutto il giorno a sbattere la testa contro questo. Ha funzionato sul mio semplice caso di test. Spero che faccia il trucco sul progetto attuale domani. – dar512

+0

Lo stesso qui. Passare a GDB l'ha risolto. – magma

+0

+1. Sono passato a GDB e ora sto vedendo "Test Failed" –

0

Sì, l'ho visto, intermittente e fastidioso.

Assicurarsi che il messaggio di registro in alto (più recente) sia selezionato.

+0

Fortunatamente, ciascuno dei log di Log Navigator ha un timestamp, quindi sono sicuro di aver selezionato il log corretto. –

+0

Sì, ho capito e so che l'errore che hai citato è reale, lo capisco anch'io. Può essere piuttosto imbarazzante (e ad Apple in astensione) quando ho questo problema durante la dimostrazione di TDD. :-) – zaph

+0

Come si aggira questo? Questo è successo nell'ultimo giorno. –

7

Ok, dopo circa 3 sviluppatori oltre 5 giorni guardando questo problema, abbiamo trovato una soluzione:

rm -rf Library/Application\ Support/iPhone\ Simulator 

O, in alternativa, se soffia via un intero albero di directory non fa per te:

Vai all'applicazione iOS Simulator. Scegli iOS Simulator dal menu in alto e scegli "Ripristina contenuto e impostazioni ..."

Apparentemente qualcosa viene danneggiato tra il simulatore e Xcode, quindi Xcode non può collegarsi al simulatore per guardare i test. Xcode ritiene che non siano stati eseguiti test, quindi i test sono passati.

Esattamente ciò che causa questo, non siamo sicuri, ma dopo 5 giorni estenuanti e 1 soluzione dopo, non ci interessa perché stiamo andando al bar più vicino.

Cheers.

+3

Hai visto questo comportamento durante il test dell'unità sul dispositivo? La mia "soluzione" era quella di impostare un punto di rottura all'inizio del test che avevo appena scritto e fatto. Hai archiviato un radar? Mi piacerebbe ingannarlo. – edelaney05

2

Ho appena letto questo lungo post sul problema che riguarda anche applicazioni Mac:

http://masonmark.com/the-xcode-fairy/

Il trucco sembra essere quello di uscire da Xcode e riaprire il progetto. Il bug è intermittente e qualche volta sarà qui, o non sarà mai qui, e rimarrà in questo stato fino al prossimo riavvio di Xcode.

Anche questa è una buona lettura.

0

Che cosa ha funzionato per me: Reimposta il simulatore come indicato da Nick L in his answer PLUS chiudendo XCode e riavviandolo. Quindi ogni build con un STAssertTrue (false) o STFail mi darà un risultato negativo.

0

Se si utilizza XCTest, assicurarsi di eseguire l'implementazione su un simulatore iOS 7. Se si esegue la distribuzione su iOS 6, la generazione avrà esito positivo, il test fallisce ma non fornisce alcuna informazione di registrazione nel debugger.

Problemi correlati