Próbuję użyć OCMock po raz pierwszy w moich testowych przypadkach. Jest to projekt Mac, zbudowany na Lodzie i kierujący go w Xcode 4.3. Głównym aplikacji i pakiet testowy oba ARC włączone, a więc za każdym razem wykonać testy widzę następujący komunikat dziennika:Awaria OCMock w czasie wykonywania
GC: forcing GC OFF because OBJC_DISABLE_GC is set
że jest w porządku, jak używam ARC więc don” t dbają o GC. Kiedy buduję moje testy jednostkowe, połączone z najnowszą stabilną wersją OCMock (2.0.1), kompilacja nie ma problemów. W czasie wykonywania, po powyższym stwierdzeniem dziennika, mam następujące:
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.
Komunikat sugeruje, że wywóz śmieci jest najczęstszym winowajcą, ale jak już wspomniano, nie ma sposobu, Używam GC. Jakie inne ustawienia mogą mnie zepsuć w czasie wykonywania? Nie sądziłem, że robię coś nietypowego, i przejrzałem ustawienia mojego projektu testowego, aby się upewnić i nie widziałem nic dziwnego.
Aktualizacja
udało mi się odtworzyć ten z nowego pustego projektu.
- Utwórz nowy projekt i go tworzyć testy jednostkowe, z ARC włączona
- usunięcia ustawienia
Test Host
z ustawieniami zbudować testów jednostkowych Bundle za - Link do ram OCMock
- Wykonywanie testów i świadkami ten sam błąd zgłosiłem powyżej
także, gdy wyłączę ARC i uczynić zbieranie śmieci Wymagane, następnie clang
zgłasza błąd łącznika typu mach-o, więc kompilacja nie powiodła się. Jeśli usuniemy łącze do frameworku OCMock, wszystko będzie dobrze. Potwierdza to moją początkową myśl, że problem leży w innym miejscu niż zbieranie śmieci.
on mówi, że prawdopodobnie nie działa bo GC jest wyłączony. "pakiet testowy wymaga zbierania śmieci Objective-C". Więc nie ustawiaj OBJC_DISABLE_GC. – vakio
@vakio "Pakiet testowy" jest moim własnym kodem testowym i używa ARC, dlatego GC jest wyłączony. Ta wiadomość jest jedynie wskazówką na to, co zwykle jest złe w środowisku wykonawczym. Próbowałem włączyć GC, ale LLVM zawodzi, prawdopodobnie dlatego, że ARC i GC nie mogą współistnieć. – Dov