2014-07-11 9 views
15

Z tego, co widzę, wygląda na to, że Xcode uruchamia testy z danego TestCase sekwencyjnie, ale z różnych Testcases równolegle.Jak uruchomić testy sekwencyjnie w Xcode 6 beta3

Czy można skonfigurować projekt/cel, aby wszystkie testy były wykonywane sekwencyjnie? Na przykład, byłoby to przydatne do uruchomienia różnych testów integracyjnych, które mają efekty uboczne wpływające na inne testy. (np. dostęp do tych samych tabel bazy danych)

EDYCJA: aby usunąć pewne zamieszanie: Nie mówię o wymuszaniu określonej sekwencji testów, tylko o upewnieniu się, że testy nie zakłócają się nawzajem.

Dzięki

+4

Może, ale generalnie zły jest polegać na teście A, zanim test B się powiedzie. – trojanfoe

+0

Pozwolę sobie poprawić: nie mówię o ponownym wykorzystaniu wyjścia A przed wykonaniem B. Mówię o upewnieniu się, że A i B nie zakłócają się nawzajem (ponieważ na przykład używają wspólnej tabeli bazy danych) –

+3

Rozumiem . Każdy test powinien być samowystarczalny i musi skonfigurować środowisko testowe tak, jak mu się podoba przed uruchomieniem. Dzięki temu są bardziej elastyczne i można wielokrotnie uruchamiać pojedynczy test, jeśli coś naprawiasz w tym obszarze. – trojanfoe

Odpowiedz

0

Nie wiem, czy to rozwiąże problem, ale można zarządzać umieścić testy w kolejce seryjny? Pozwala na ich jednoczesne uruchamianie, aby czekać na usunięcie barier.

func dispatch_barrier_async(_ queue: dispatch_queue_t, 
         _ block: dispatch_block_t) 

https://developer.apple.com/library/ios/documentation/Performance/Reference/GCD_libdispatch_Ref/#//apple_ref/c/func/dispatch_barrier_async

Alternatywnie, można konfiguracji wielu kontekstach i połączyć je później.

1

Jeśli potrzebujesz, aby twoje obiekty miały stały stan początkowy dla testów, poleciłbym dodanie wywołań do metody setUp twoich klas testowych. setUp został wywołany przed każdym testem w klasie testowej.

Jeśli potrzebujesz, aby twój pakiet działał w określonej kolejności, brzmi to jak nie masz testów jednostkowych i przeprowadzasz testy integracji. Możesz spróbować użyć setUp do zainicjowania obiektów niższego poziomu. Jeśli interesuje Cię zachowanie klasy wyższego poziomu, spróbuj kpić. Struktura OCMock jest dostępna dla Objective-C.

Powiązane problemy