Sto provando a utilizzare OCMock per la prima volta nei miei casi di test. Si tratta di un progetto Mac, sviluppato e rivolto a Lion, in Xcode 4.3. L'applicazione principale e il fascio di test entrambi hanno ARC acceso, e così ogni volta che eseguo i test che vedo il seguente messaggio di registro:Errore OCMock al runtime
GC: forcing GC OFF because OBJC_DISABLE_GC is set
va bene, come sto usando ARC così ho don' t cura di GC. Quando costruisco i miei test unitari, collegati all'ultima release stabile di OCMock (2.0.1), la build non ha problemi. In fase di esecuzione, dopo la dichiarazione di registro di cui sopra, ottengo il seguente:
The test bundle at /Users/___/Library/Developer/Xcode/DerivedData/___-ayizwpehemunvodsdvczckkvarsh/Build/Products/Debug/___Tests.octest could not be loaded because its Objective-C runtime information does not match the runtime information required by the test rig. This is likely because the test rig is being run with Objective-C garbage collection disabled, but the test bundle requires Objective-C garbage collection. To enable Objective-C garbage collection for the test rig, run it in an environment without the OBJC_DISABLE_GC environment variable. 2012-03-06 10:29:32.812 otest[8486:203] *** NSTask: Task create for path '/Users/___/Library/Developer/Xcode/DerivedData/___-ayizwpehemunvodsdvczckkvarsh/Build/Products/Debug/___Tests.octest/Contents/MacOS/___Tests' failed: 22, "Invalid argument". Terminating temporary process.
Il messaggio implica che la raccolta dei rifiuti è il colpevole più comune, ma come già detto, non c'è modo sto usando GC. Quindi, quali altre impostazioni potrebbero incasinarmi durante il runtime? Non pensavo di fare nulla di atipico, e ho verificato le impostazioni del mio progetto di test per essere sicuro, e non ho visto niente di strano.
Aggiornamento
sono stato in grado di riprodurre questo con un nuovo progetto vuoto.
- Creare un nuovo progetto e farlo creare test di unità, con ARC abilitato
- cancellare l'impostazione
Test Host
da impostazioni di generazione del fascio di test di unità - Link al quadro OCMock
- esegue le prove e testimoniare lo stesso errore ho riportato sopra
Inoltre, quando spengo ARC e fare garbage collection richiesto, quindi 0.123.segnala un errore del linker mach-o, quindi la compilazione non riesce. Se rimuovo il collegamento al framework OCMock, funziona bene. Questo supporta il mio pensiero iniziale che il problema si trova in un luogo diverso dalla raccolta dei rifiuti.
Si dice che non è probabile lavorare perché GC è spento. "il bundle di test richiede la garbage collection di Objective-C". Quindi prova a non impostare OBJC_DISABLE_GC. – vakio
@vakio il "test bundle" è il mio codice di test e utilizza ARC, motivo per cui GC è disabilitato. Quel messaggio è solo un suggerimento su ciò che di solito è sbagliato nell'ambiente di runtime. Ho provato ad abilitare GC, ma LLVM fallisce, probabilmente perché ARC e GC non possono coesistere. – Dov