UPDATE: alla fine ho rinunciato e ho aggiunto GHUnit al mio progetto. Ho iniziato a lavorare con GHUnit in pochi minuti.OCUnit test di un framework incorporato
UPDATE: È possibile scaricare il progetto Xcode qui: http://github.com/d11wtq/Cioccolata
Ho aggiunto un target unit test al mio progetto Xcode, ma non riesce a trovare il mio quadro, quando si costruisce, dicendo:
Test.octest could not be loaded because a link error occurred. It is likely that dyld cannot locate a framework framework or library that the the test bundle was linked against, possibly because the framework or library had an incorrect install path at link time.
Il mio framework (l'obiettivo principale del progetto) è progettato per essere incorporato e quindi ha un percorso di installazione di @executable_path/../Frameworks
.
Ho contrassegnato il framework come dipendenza diretta del target di test e l'ho aggiunto alla fase di costruzione "Link Binary with Libraries".
Inoltre ho aggiunto un primo passaggio (dopo aver generato la dipendenza) di "Copia file" che copia semplicemente il framework nella directory Framework dei bundle dell'unità di test.
Qualcuno ha esperienza in questo? Non sono sicuro di cosa mi sia perso.
MODIFICA | Sono abbastanza sicuro che non dovrei, dal momento che un framework non è eseguibile, ma non ho impostato "Test Host" e "Bundle Loader". Questo dovrebbe (a mio modo di vedere) tutto ok perché il bundle di test è collegato al framework e lo caricherà proprio come qualsiasi altro bundle.
MODIFICA | Penso di essere quasi arrivato. Ho letto il seguente articolo che detta l'uso di @rpath invece di @executable_path.
http://www.dribin.org/dave/blog/archives/2009/11/15/rpath/
In questo caso ha perfettamente senso dal momento che il fascio di prova OCUnit NON è un eseguibile, si tratta di un vecchio fascio pianura, quindi @executable_path non è compatibile. Così ora il mio framework ha la sua directory di installazione impostata su @rpath
e la destinazione Test ha i suoi percorsi di ricerca di runtime (rpath) definiti come la directory di compilazione. Questo mi evita di dover copiare il framework nel bundle di test e significa che nel complesso la struttura risultante è di natura molto più flessibile poiché può vivere ovunque.
Ora, mi rendo anche conto che I deve impostare il Caricatore fascio sulla destinazione Test, quindi questo è ora impostato sul percorso del file binario.
Posso creare il target di test e posso # importare classi dal framework, senza errori. Ma non appena cerco di istanziare una classe dal quadro ottengo il seguente errore:
/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[50676]: GC: forcing GC OFF because OBJC_DISABLE_GC is set Test Suite '/Users/chris/Projects/Mac/Cioccolata/build/Debug/Test.octest(Tests)' started at 2010-05-21 12:53:00 +1000 Test Suite 'CTRequestTest' started at 2010-05-21 12:53:00 +1000 Test Case '-[CTRequestTest testNothing]' started. /Developer/Tools/RunPlatformUnitTests.include: line 415: 50676 Bus error "${THIN_TEST_RIG}" "${OTHER_TEST_FLAGS}" "${TEST_BUNDLE_PATH}" /Developer/Tools/RunPlatformUnitTests.include:451: error: Test rig '/Developer/Tools/otest' exited abnormally with code 138 (it may have crashed). Command /bin/sh failed with exit code 1
Il mio metodo di prova non fa altro che assegnare e successivamente rilasciare una classe HelloWorld ho creato per aiutare il debug di questa configurazione:
- (void)testNothing {
CTHelloWorld *h = [[CTHelloWorld alloc] init];
[h release];
}
Se sostituisco queste righe di codice con un STAssertTrue(YES, @"Testing nothing");
l'errore va via, anche se la classe è ancora in fase di importazione.
In qualche modo potresti sventrare il tuo progetto e pubblicarlo online? Sarei più che disposto a dare una rapida occhiata. Ho faticato con un problema simile qualche tempo fa ma non ricordo esattamente cosa ho fatto. Guardare un progetto rotto potrebbe aiutare a scuotere il cervello. –
Ora lo sto mettendo su github ... posterò in un tick. – d11wtq
Non c'è molto in termini di codice segreto qui. A malapena è persino iniziato;) http://github.com/d11wtq/Cioccolata – d11wtq