2012-03-06 38 views
5

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.

  1. Utwórz nowy projekt i go tworzyć testy jednostkowe, z ARC włączona
  2. usunięcia ustawienia Test Host z ustawieniami zbudować testów jednostkowych Bundle za
  3. Link do ram OCMock
  4. 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.

+0

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

+0

@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

Odpowiedz

18

Znalazłem odpowiedź, po dniu spędzonym na poszukiwaniu wszystkiego mogłem pomyśleć, w Hamcrest tutorial (czytając bardziej uważnie przez OCMock tutorial połączonego z OCMock.org, to wspomniano tam zbyt). Z jakiegoś powodu szkielety Hamcrest i OCMock muszą zostać skopiowane do katalogu produktów. Wtedy wszystko działa jak urok.

  1. przejść do ustawień dla swoich testach Bundle
  2. Przejdź do Build faz zakładka
  3. Kliknij Dodaj Budowanie Phase przycisk i wybierz Dodaj Kopiowanie plików
  4. ustawić nowy Kopiuj pliki buduj fazy "Miejsce docelowe do Katalog produktów
  5. Przeciągnij OCMock.ramy z zarysem projektu na listę plików do fazy
  6. Drag fazy kopiowania plików powyżej Run Script fazie

Wykonuje swoje testy jak zwykle

+1

Zarówno OCHamrest, jak i OCMock są zbudowane z '@ rpath' w ścieżce programu ładującego. To sprawia, że ​​działają one w katalogu produktów, ponieważ domyślnie znajduje się on na ścieżce. Możesz użyć 'LC_RPATH' i innych środków, aby dać ci większą elastyczność. Zobacz dyskusję '@ rpath' na stronie man' dyld'. –

+0

Interesujące, dziękuję za wyjaśnienie. – Dov

+0

Miałem ten sam problem z moim projektem, który obejmuje framework Growl. Rozwiązanie było takie samo, dziękuję! – mrwalker

Powiązane problemy