2010-01-04 5 views
36

Così ho seguito this tutorial per installare i test delle unità sulla mia app quando mi sono bloccato.Implementazione dell'unità Test con l'SDK dell'iPhone

A bullet point 8 in quella tutorial mostra questa immagine, che è quello che dovrebbe essere in attesa quando costruire: alt text http://developer.apple.com/library/ios/documentation/Xcode/Conceptual/iphone_development/art/logic_test_failure_text_editor.jpg

Tuttavia questo non è ciò che ottengo quando costruire. Viene visualizzato questo messaggio di errore: Command /bin/sh failed with exit code 1 e il messaggio di errore creato dal test dell'unità. Poi, quando mi spieghi il primo errore ottengo questo:

PhaseScriptExecution "Run Script" "build/3D Pool.build/Debug-iphonesimulator/LogicTests.build/Script-1A6BA6AE10F28F40008AC2A8.sh" 
cd "/Users/james/Desktop/FYP/3D Pool" 
setenv ACTION build 
setenv ALTERNATE_GROUP staff 
... 
setenv XCODE_VERSION_MAJOR 0300 
setenv XCODE_VERSION_MINOR 0320 
setenv YACC /Developer/usr/bin/yacc 
/bin/sh -c "\"/Users/james/Desktop/FYP/3D Pool/build/3D Pool.build/Debug-iphonesimulator/LogicTests.build/Script-1A6BA6AE10F28F40008AC2A8.sh\"" 

/Developer/Tools/RunPlatformUnitTests.include:412: note: Started tests for architectures 'i386' 
/Developer/Tools/RunPlatformUnitTests.include:419: note: Running tests for architecture 'i386' (GC OFF) 
objc[12589]: GC: forcing GC OFF because OBJC_DISABLE_GC is set 
Test Suite '/Users/james/Desktop/FYP/3D Pool/build/Debug-iphonesimulator/LogicTests.octest(Tests)' started at 2010-01-04 21:05:06 +0000 
Test Suite 'LogicTests' started at 2010-01-04 21:05:06 +0000 
Test Case '-[LogicTests testFail]' started. 
/Users/james/Desktop/FYP/3D Pool/LogicTests.m:17: error: -[LogicTests testFail] : Must fail to succeed. 
Test Case '-[LogicTests testFail]' failed (0.000 seconds). 
Test Suite 'LogicTests' finished at 2010-01-04 21:05:06 +0000. 
Executed 1 test, with 1 failure (0 unexpected) in 0.000 (0.000) seconds 

Test Suite '/Users/james/Desktop/FYP/3D Pool/build/Debug-iphonesimulator/LogicTests.octest(Tests)' finished at 2010-01-04 21:05:06 +0000. 
Executed 1 test, with 1 failure (0 unexpected) in 0.000 (0.002) seconds 

/Developer/Tools/RunPlatformUnitTests.include:448: error: Failed tests for architecture 'i386' (GC OFF) 
/Developer/Tools/RunPlatformUnitTests.include:462: note: Completed tests for architectures 'i386' 
Command /bin/sh failed with exit code 1 

Ora questo è molto strano in quanto è in esecuzione dei test (e riuscendo, come si può vedere il mio tiro STFail), perché se posso aggiungere una prova diversa che passa non ho errori, quindi i test stanno funzionando bene. Ma perché sto facendo fallire questa build extra?

Potrebbe anche essere utile notare che quando si scaricano soluzioni/modelli che dovrebbero risolvere il problema, si ottiene lo stesso errore. Sto indovinando che ho impostato qualcosa di sbagliato qui, ma ho appena seguito un tutorial al 100% correttamente !! Se qualcuno potesse aiutarmi, sarei molto grato!

Grazie

EDIT: Secondo this blog, this post e pochi altri siti web, io non sono l'unico a ottenere questo problema. È stato così dal rilascio di xCode 3.2, supponendo che i documenti e le esercitazioni del centro di sviluppo della mela ecc. Siano pre-3.2.

Tuttavia alcuni dicono che è un problema noto mentre altri sembrano pensare che sia stato intenzionale. Io per uno vorrei sia la console estesa e nei messaggi di codice, e certamente non mi piace l'errore "Command/bin/sh ..." e penso davvero che avrebbero documentato un tale aggiornamento. Spero che verrà riparato presto comunque.

UPDATE: Ecco la conferma è qualcosa è cambiato dal rilascio di xCode 3.2.1.

Questa immagine: alt text http://ing0.co.uk/info/pics/unittest-xcode-3.2.1.png proviene dal mio test di build utilizzando 3.2.1. Questo è da una versione precedente (3.1.4): alt text http://ing0.co.uk/info/pics/unittest-xcode-3.1.4.png. (Il progetto per entrambi è rimasto invariato).

Modifica: URL immagine aggiornati.

+0

Sto ricevendo lo stesso problema in 3.2.5 (64-bit Intel Core i3, OSX 10.6.6) – Vamos

+0

Bello per te la taglia, ma non sono così sicuro che ci sarà una risposta! –

+0

C'è una tomba, mi sembra di avere dei test funzionanti. – Vamos

risposta

1

Hai provato a impostare la configurazione di generazione su "Debug" per il test case?

ho fatto, come mostrato in http://nothing2fancy.com/2009/08/04/failed-tests-for-architecture-i386-gc-off/ e ha funzionato

+0

Grazie per il suggerimento ma non è proprio quello che sta succedendo sul mio! I test unitari stanno funzionando bene, è il messaggio che dovrebbe apparire nel codice è passato dalla versione più recente di xcode, ora appaiono nei risultati di compilazione ma non penso che questo sia previsto! Quale versione di xcode stai usando? –

+0

Versione 3.2.2 Pre-release. in modo che potrebbe essere risolto nell'ultimo –

+0

Forse, sono ancora in 3.2.1. Grazie per questo, riceverò la pre-release corrente e darò un risultato. –

0

non so un modo giusto o no, ma è lavoro per me.

In scheda Generale delle informazioni Test Case, ho aggiungere il mio principale eseguibile dell'applicazione obiettivo come una dipendenza diretta.

E nessun errore per 'i386' (GC OFF) ".

Buona fortuna.

+0

Grazie per l'input ma continua a fare la stessa cosa :( –

0

Quando si creano le prime classi di test case, assicurarsi che il Target sia impostato sul target UnitTest, non sul target dell'applicazione.

Se si dimentica di fare questo quando si crea la classe, è possibile "Ottieni informazioni" sulla classe esistente e impostare il target lì ....

+0

È stato un da quando ho provato a farlo ma sono sicuro che l'ho fatto !! –

0

OK, mai giocato con i test di unità in XCode (ovviamente mi piaceva JUnit nei vecchi tempi java). Quindi è solo una prova: quale compilatore stai usando, GCC o LLVM? Forse GCC è la scelta migliore per essere al sicuro.

Hai lo stesso comportamento quando "Crea solo architettura attiva" nelle impostazioni di Progetto è abilitato? Questo switch rimuove i messaggi di errore duplicati durante la creazione di armv6 e armv7, forse è correlato.

5

doppio clic 'Esegui script' sotto 'obiettivi'/'Lo script nome di destinazione' quindi digitare

 
# Run the unit tests in this test bundle. 
"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests" 1> /tmp/RunUnitTests.out 

Fondamentalmente è necessario aggiungere

 
1> /tmp/RunUnitTests.out 

a ciò che è già lì

+0

Sembra un collegamento morto, ho paura! –

+0

Impressionante, questo lo ha risolto per me (e questo mi stava facendo impazzire fino ad ora!) –

+0

Funziona anche per me, ma ho usato "1>/dev/null", poiché l'output nel file tmp non verrà comunque esaminato. – Frank

0

Si prega di dare un'occhiata al più recente sample di Apple. Quando si scarica il codice c'è un file read me, in cui il suo chiaramente scritto:

——————————————————————————————————————————————————————————————————————————————— 
Running Logic Tests 
To run the logic tests: 
1. Choose Project > Set Active Target > CalculatorTests. 
2. Choose Project > Set Active SDK > Simulator. 
3. Choose Build > Build. Xcode runs the test cases implemented in 
    the CalculatorTests.m file. 
4. Choose Build > Build Results to open the Build Results window, containing 
    the tests results. You may have to click the Show Transcript button (the 
    third button on the bottom-left corner of the build results list) to view 
    the build transcript. 

The logic-tests results look similar to this: 

    PhaseScriptExecution <project_directory>/build/iPhoneUnitTests.build/Debug-iphonesimulator/CalculatorTests.build/Script-17AA84010F99894F00167681.sh 
     cd <project_directory> 
     /bin/sh -c <project_directory>/build/iPhoneUnitTests.build/Debug-iphonesimulator/CalculatorTests.build/Script-17AA84010F99894F00167681.sh 
    /Developer/Tools/RunPlatformUnitTests.include:364: note: Started tests for architectures 'i386' 
    /Developer/Tools/RunPlatformUnitTests.include:371: note: Running tests for architecture 'i386' (GC OFF) 
    objc[1222]: GC: forcing GC OFF because OBJC_DISABLE_GC is set 
    objc[1222]: GC: forcing GC OFF because OBJC_DISABLE_GC is set 
    Test Suite '<project_directory>/build/Debug-iphonesimulator/CalculatorTests.octest(Tests)' started at 2009-05-19 16:55:28 -0700 
    Test Suite 'CalculatorTests' started at 2009-05-19 16:55:28 -0700 
    <time> otest[1222:80f] -[CalculatorTests testAddition] setUp 
    <time> otest[1222:80f] -[CalculatorTests testAddition] start 
    <time> otest[1222:80f] -[CalculatorTests testAddition] end 
    <time> otest[1222:80f] -[CalculatorTests testAddition] tearDown 
    Test Case '-[CalculatorTests testAddition]' passed (0.007 seconds). 
    <time> otest[1222:80f] -[CalculatorTests testDivision] setUp 
    <time> otest[1222:80f] -[CalculatorTests testDivision] start 
    <time> otest[1222:80f] -[CalculatorTests testDivision] end 
    <time> otest[1222:80f] -[CalculatorTests testDivision] tearDown 
    Test Case '-[CalculatorTests testDivision]' passed (0.003 seconds). 
    <time> otest[1222:80f] -[CalculatorTests testInputException] setUp 
    <time> otest[1222:80f] -[CalculatorTests testInputException] start 
    <time> otest[1222:80f] -[CalculatorTests testInputException] end 
    <time> otest[1222:80f] -[CalculatorTests testInputException] tearDown 
    ... 
    Test Case '-[CalculatorTests testSubtractionNegativeResult]' passed (0.002 seconds). 
    Test Suite 'CalculatorTests' finished at 2009-05-19 16:55:28 -0700. 
    Executed 6 tests, with 0 failures (0 unexpected) in 0.021 (0.022) seconds 

    Test Suite '<project_directory>/build/Debug-iphonesimulator/CalculatorTests.octest(Tests)' finished at 2009-05-19 16:55:28 -0700. 
    Executed 6 tests, with 0 failures (0 unexpected) in 0.021 (0.024) seconds 

    /Developer/Tools/RunPlatformUnitTests.include:388: note: Passed tests for architecture 'i386' (GC OFF) 
    /Developer/Tools/RunPlatformUnitTests.include:399: note: Completed tests for architectures 'i386' 


Remember that logic tests are executed as part of the build process to provide 
you with build errors for failed unit tests. Logic unit-test bundles are not 
intented to run in iPhone Simulator or a device. 

——————————————————————————————————————————————————————————————————————————————— 

Quindi c'è qualche cambiamento nel kit sentesting. Non penso che varrebbe la pena di presentare un bug.

+0

Ricorda che questa domanda ha più di un anno! –

+0

@ ing0 scusate, non ho notato :(ma Boy! La taglia è per 7 giorni solo così ho risposto;) –

1

Menu: Project -> Nuova Fase di Costruzione -> Nuovo RunScript Costruire Fase -> Incolla il seguente nell'area di testo vuota:

"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests" 1> /tmp/RunUnitTests.out

Ora provare a costruire e si dovrebbe ottenere un errore sui test unitari falliti.

-4

Questo è il comportamento previsto. La compilazione fallirà se uno dei test fallisce e la compilazione avrà esito positivo se tutti i test passeranno.

+0

Chiaramente non avete letto il post. I test unitari funzionano bene ma non vengono visualizzati come dovrebbero. Guarda gli screenshot della versione 3.2 rispetto a 3.1. –

Problemi correlati