2011-01-09 9 views
5

Poszedłem za Apple instructions, aby skonfigurować testowanie jednostek w moim projekcie. Postępowałem zgodnie ze wskazówkami, aby uzależnić je od siebie, więc testy są przeprowadzane z każdą kompilacją mojego głównego projektu. To działa, a kiedy moje testy mijają, aplikacja działa; kiedy tego nie robią, generuję błędy na liniach testów jednostkowych, które się nie powiodły.W jaki sposób debugujesz test jednostki w Xcode 3?

Chciałbym jednak móc przejść przez mój kod aplikacji, gdy testy się nie udają, ale nie mogę poprawnie skonfigurować Xcode (3.2.5). Projekt jest projektem Mac, a nie iOS.

Próbowałem instrukcji here i here, ale wykonanie nigdy nie zatrzymywało się w ustawionych punktach przerwania, ani w kodzie testu jednostki, ani w kodzie aplikacji. Po wykonaniu pierwszego zestawu instrukcji, ustawione przeze mnie granice zmieniły kolor na żółty z niebieskimi konturami i nie wiem, co to znaczyło. Co muszę zrobić, aby przejść przez moje testy?

Aktualizacja

znalazłem innej strony próbuje rozwiązać ten problem (here) poprzez dodanie argumentów i zmiennych środowiskowych do mojego głównego pliku wykonywalnego, ale znowu te nie powodują wykonanie zatrzymać na moje pułapki. Zauważyłem również, że instrukcje mojego testu (obfite) nie pojawiają się również w mojej konsoli Debuggera.

Dowiedziałem się również, że żółte punkty przerwania oznaczają kod, którego nie można znaleźć w czasie wykonywania. Są one w mojej klasie przypadków testowych, więc zdecydowanie wydaje się, że wyjaśniają, dlaczego nie strzelają.

Odpowiedz

0

Jedyną rzeczą, która przyniosła mi pracę, było uaktualnienie do wersji Xcode 4. Integruje się pięknie. W trakcie przejścia do niego było little bit of pain, ale teraz, gdy to się skończyło, integracja jest świetna. Jestem w stanie przejść przez moje testy i kod aplikacji.

0

opracuj testy jednostek, aby zawinąć program, który znajduje się w projekcie, który ma cel, a następnie po prostu otwórz projekt zależny i w nim pracuj. prawdopodobnie byłby to projekt z biblioteką i plikiem wykonywalnym, który wywołuje bibliotekę (2 cele). wtedy możesz po prostu otworzyć projekt i debugować, podczas gdy twoje testy jednostek w zależności będą wywoływać tę bibliotekę. jest to podejście bardziej modułowe.

powodzenia

2

ja zwykle nie mają problemu debugowania moich testów OCTest z Xcode 3.2, włącznie z powstrzymaniem się pułapki.

Podstawową ideą jest poinformowanie gdb o tym, że ma on największy wpływ na Twój pakiet jako argument. Zrobisz to, dodając /Developer/Tools/otest jako niestandardowy plik wykonywalny do projektu Xcode, a następnie nazwę pakietu OCTest jako jedyny argument (wybierz "Edytuj aktywny plik wykonywalny" w menu Projekt, a na drugiej karcie dodaj wiersz z Foo.octest w górnym polu do debugowania testu Foo).

Teraz, po naciśnięciu przycisku debugowania, rozpocznie się teraz debugowanie pakietu testowego i zatrzyma się na zadeklarowanych punktach przerwania (jeśli klikniesz przycisk kompilacji i debugowania, może się nie uruchomić, jeśli test nie przejdzie). Zauważ też, że będziesz musiał ustawić zmienną środowiskową na YES, aby wyłączyć usuwanie śmieci (w dolnym okienku tej samej zakładki "Argumenty"), otest powie ci dokładnie, jeśli potrzebujesz.

Jeśli zrobiłeś wszystko powyżej i nadal nie możesz wykonać kroku testowego, może to być spowodowane kompilacją z wyłączonym generowaniem symboli debugowania - sprawdź ustawienia kompilacji debugowania, ale najprawdopodobniej dlatego, że kod testowy nie jest przekompilowane w ogóle. Mówię najprawdopodobniej, ponieważ twoje dzienniki nie są wyświetlane w konsoli, NSLog powinien pisać w konsoli Xcode. Wyczyść foldery kompilacji i bin ręcznie, czasami zmieniając ścieżkę lub nazwę, która kończy się ładowaniem przestarzałego kodu. Możesz również sprawdzić, czy plik nie wyskoczył z miejsca docelowego testu (czy test w tym samym pliku nie jest rejestrowany?).

2

Mam wariant tego, co Hiedi Utley napisał na http://hiediutley.wordpress.com/2011/03/08/xcode3-debugging-ios-unit-tests/. To, co mi się nie podobało, to duplikacja docelowych pakietów testowych, jedna zawierająca fazę Run Script, aby wykonać testy jednostkowe po zbudowaniu, a druga, która nie przeprowadziła testów jednostkowych. Zauważyłem, że w panelu Get Info dla fazy Run Script przełącznik "Uruchom skrypt tylko podczas instalacji" i pomyślałem, że byłby to sposób przełączania pomiędzy uruchomieniem testów jednostkowych w trybie normalnym i uruchomieniem ich w debugerze.

Zgodnie z instrukcjami Hiedi utwórz nowy element wykonywalny, na przykład LogicTestsGDB. Skonfigurować go tak:

ogólne zakładka:

  • Ścieżka: Developer/usr/bin/otest (Nie wiodącym /) Rodzaj
  • Ścieżka: Relative to Current SDK
  • Ustaw katalog roboczy: Build Products directory

Argumenty Ta b:

  • Argumenty: Twój unittest Bundle (np. LogicTests.octest)
  • Zmienne należy ustawić w środowisku
    • DYLD_LIBRARY_PATH ... : ${BUILD_PRODUCTS_DIR}:${DYLD_LIBRARY_PATH}
    • DYLD_FRAMEWORK_PATH . : ${SDKROOT}/Developer/Library/Frameworks
    • DYLD_ROOT_PATH ...... : ${SDKROOT}
    • IPHONE_SIMULATOR_ROOT : ${SDKROOT}
    • OBJC_DISABLE_GC : YES
    • DYLD_NEW_LOCAL_SHARED_REGIONS : YES
    • DYLD_NO_FIX_PREBINDING : YES
    • CFFIXED_USER_HOME : ${HOME}/Library/Application Support/iPhone Simulator/

Gotowe. Teraz do debugowania testów jednostkowych,

  1. Expose faz zbudować Bundle i dwukrotnie kliknąć na Run Script fazie.
  2. Sprawdź skrypt Run tylko podczas instalowania opcję
  3. Ustaw Aktywny docelowa się wiązkę testów jednostkowych (np. LogicTests.octest).
  4. Ustaw Aktywny Executable być nowym wykonywalny utworzone (np. LogicTestsGDB)
  5. Kliknij Budowa i Debug

Aby uruchomić normalnie, wykonywanie testów jednostkowych w ramach fazy kompilacji aplikacja:

  1. Expose faz zbudować Bundle i dwukrotnie kliknąć na Run Script fazie. tylko
  2. Odznacz skrypt Run podczas instalowania opcję
  3. Ustawianie Aktywny docelowa być aplikację budowany
  4. Ustaw Aktywny wykonywalny być aplikacja buduje

Aby zautomatyzować powyższe kroki, utworzyłem prosty skrypt AppleScript, który przełącza między dwoma stanami:

property kApplicationName : "MyApp" -- name of the normal application to build 
property kUnitTestName : "LogicTests" -- name of the bundle target to debug 
property kUnitTestRunner : "LogicTestGDB" -- name of the executable to use when debugging the unit test bundle 

tell application "Xcode" 
    tell the active project document 
    set theTarget to first target whose name is kUnitTestName 
     set thePhase to first run script phase of theTarget 
     if name of active target is kApplicationName then 
      set active target to theTarget 
      set theExecutable to first executable whose name is kUnitTestRunner 
      set active executable to theExecutable 
      set run only when installing of thePhase to true 
     else 
      set theTarget to first target whose name is kApplicationName 
      set active target to theTarget 
      set theExecutable to first executable whose name is kApplicationName 
      set active executable to theExecutable 
      set run only when installing of thePhase to false 
     end if 
     return "Targeting " & (name of active executable) 
    end tell 
end tell 
Powiązane problemy