Chcę napisać test jednostkowy tylko GUI część mojej aplikacji Cocoa.Jak mogę napisać automatyczny test jednostkowy GUI w Xcode?
W teście jednostek podręcznych istnieje szkielet testowy i przypadek testowy, który wywołuje testowaną jednostkę. Cały kod poniżej tej jednostki jest wyszydzany. Tak więc zarówno wejście, jak i wyjście są kontrolowane i monitorowane; testowany jest tylko kod w testowanej jednostce.
Chcę zrobić to samo, gdy testowana jednostka jest moim GUI:
1) Skonfigurować pewien rodzaj framework, w którym mogę napisać kod, który będzie manipulować i kontrolować elementy sterujące GUI.
2) Połącz moje kontrolki GUI z makrami mojego rzeczywistego kodu, a nie z rzeczywistymi instancjami.
3) Uruchom test, który manipuluje elementami sterującymi, a następnie sprawdza próbny obiekt, aby sprawdzić, czy poprawne metody zostały wywołane z poprawnymi parametrami i sprawdza GUI, czy odpowiedzi z obiektu próbnego powodują poprawne zmiany w widżetach. .
Ktoś to robi? Jeśli tak to jak? Jakieś pomysły na to, w jaki sposób mogę to zrobić?
Dzięki,
Pat
(Edit), otrzymując bardzo konkretny przykład, chcę:
1) Napisz przypadek testowy, który będzie wybrać pozycję menu 'MyMenu' -> „MyItem ". W tym przypadku testowym chcę sprawdzić, czy metoda [AppDelegate doMyItem] jest wywoływana dokładnie raz i że nie są wywoływane żadne inne metody w AppDelegate.
2) Wygeneruj próbny obiekt AppDelegate. (Wiem, jak to zrobić)
3) W jakiś sposób (handwaving tutaj) łączę moją aplikację, tak, że w miejsce prawdziwej instancji dołącza się fałszywa instancja AppDelegate.
4) Uruchom test. Zobacz, jak to się nie uda, ponieważ 1) Nie utworzyłem jeszcze MyMenu. 2) Nie stworzyłem jeszcze MyItem. 3) Nie zrobiłem IP pracy, aby połączyć MyItem z [AppDelegate doMyItem] lub 4), ponieważ nie napisałem jeszcze metody "doMyItem".
5) Napraw powyższe cztery problemy (po jednym na raz, jeśli czuję się naprawdę pedantycznie tego dnia).
6) Ponownie uruchom test i obejrzyj go.
Czy to sprawia, że pytanie jest jasne?
Hi Patros, Za drugie # 1, nie bardzo rozumiem, co to znaczy 'generować dane wprowadzone przez użytkownika-like'. Czy możesz podać mi przykład? Dzięki, Pat –
To oznacza tylko generowanie zdarzeń klawiatury i myszy, które chcesz zobaczyć. Możesz to zrobić, owijając macierzyste klasy UI i przejmując kontrolę nad ich zdarzeniami, w miarę możliwości uzyskując dostęp do interfejsu API lub pisząc niestandardowe sterowniki. – patros