2012-09-27 17 views
7

Mam zestaw testów jednostek mocha.Testy jednostkowe czasami zawodzą, czasami mijając

Po uruchomieniu ich lokalnie wszystko działa poprawnie. Kiedy uruchomię je na naszym serwerze CI Jenkins, czasami zawodzą, czasami mijają.

Po prostu nie mogę odtworzyć przyczyny niepowodzenia. Co może powodować takie zachowanie?

+0

oczekiwane pliki są tymczasowo zamknięte? uruchamianie w wydania z testami wielowątkowymi na silnym CI, które nie występują na komputerach deweloperów? tymczasowe błędy sieciowe blokujące rzeczy? istnieje wiele rzeczy, które mogą powodować trudne do sprawdzenia niepowodzenia testów jednostkowych ... to wszystko jest częścią rozwiązywania problemów. czy to są te same testy, które okazują się problematyczne? – TZHX

Odpowiedz

1

Chciałbym geuss używać ponownie testowania dla wielu testów. W niektórych przypadkach kolejność testów zmienia się z zamówienia na lokalnej maszynie i nie masz poprawnego urządzenia po rozpoczęciu testu. Aby to naprawić, powinieneś dać każdemu testowi czyste urządzenie.

Inną przyczyną może być ponowne użycie bazy danych z wielu lokalizacji podczas testów runnen (dwa kompilacje serwerów o tej samej konfiguracji testowej). Daj każdemu serwerowi kompilacji własną bazę danych. Lub podkasuj warstwę bazy danych. Test nie powinien zależeć od zasobów zewnętrznych, z wyjątkiem sytuacji, gdy testujesz połączenia z zasobami zewnętrznymi.

+0

Niestety, nie. Cała baza danych jest czyszczona przy każdym uruchomieniu testu. Używam mocha do przeprowadzania testów, więc są one uruchamiane w seriach. Baza danych jest zainstalowana lokalnie na tym komputerze, więc nie powinno to powodować, że inne usługi będą z niej korzystać. –

2

Testy mogą nie działać sporadycznie z wielu powodów, a identyfikacja przyczyn niepowodzenia często ujawnia kod i środowisko.

Oto kilka możliwych przyczyn:

• Wspólna obiektów - pojedynczych, które utrzymują stan może powodować problemy między testami czy środowisko testowe nie jest resetowany do znanego stanu. czy jeśli testy biegacz wykonuje testy w niedeterministycznym Aby można zobaczyć przypadkowe błędy, które są rzeczywiście wystawienie uszkodzone kwestie państwowe

• zależnościach środowiska i zewnętrznych - żadnego zewnętrznego obiektu, który może pomieścić stan może spowodować nieprzewidywalne rezultaty

• Czas - czasami testy są zapisywane z limitami czasu lub zbyt szybkimi przerwami wątków. Jeśli serwer build pracuje pod dużym obciążeniem te limity czasu może nie być wystarczająco

jako ogólne wytyczne długo, testy muszą być:

  • Isolated: Badania koncentrują się na jednym urządzeniu naraz
  • powtarzalny: produkuje te same wyniki za każdym razem
  • niezależny: kolejność, w jakiej są wykonywane testy nie powinno mieć znaczenia
0

To może się zdarzyć, jeśli testowanie kodu wielowątkowe i używać Thread.sleep(time); w swoich badaniach. Jeśli czas uśpienia nie jest wystarczająco długi, testy mogą przejść lub zakończyć się niepowodzeniem w zależności od szybkości przetwarzania komputera.Powiązane dyskusje: