10 sekund to bardzo długi czas na wykonanie pojedynczego testu. Moje przeczucie jest takie, że Twój cel specyfikacji przeprowadza jednocześnie testy jednostkowe i testy integracji. Jest to typowa rzecz, w którą wpadają projekty i na pewnym etapie będziesz musiał pokonać ten dług techniczny, jeśli chcesz produkować więcej i szybciej. Istnieje wiele strategii, które mogą ci w tym pomóc ... a ja polecę kilka z nich, z których korzystałem w przeszłości.
1. Oddzielna jednostka od testów integracji
Pierwszą rzeczą, którą bym zrobił, to oddzielenie jednostki od testów integracyjnych. Możesz to zrobić:
- Przenoszenie ich (do oddzielnych folderów w katalogu spec) - i modyfikowanie celów rake
- Oznaczanie ich (rspec umożliwia tagowanie testów)
Filozofia głosi, że chcesz, aby twoje regularne kompilacje były szybkie - w przeciwnym razie ludzie nie będą zbyt szczęśliwi, aby je często uruchamiać. Więc wracaj na to terytorium. Skorzystaj z szybkiego uruchamiania regularnych testów i używaj serwera ciągłej integracji, aby uruchomić bardziej kompletną kompilację.
Test integracji to test obejmujący zewnętrzne zależności (np. Baza danych, usługa sieciowa, kolejka, a niektórzy twierdzą, że system plików). Test jednostkowy po prostu testuje określony element kodu, który chcesz sprawdzić. Powinien działać szybko (możliwe jest 9000 w 45 sekund), tj. Większość z nich powinna działać w pamięci.
2. Przekształć testy integracji w testy jednostkowe
Jeśli większość testów jednostkowych jest mniejsza niż zestaw testów integracyjnych, masz problem. Oznacza to, że niespójności zaczną pojawiać się łatwiej. Od tego momentu zacznij tworzyć więcej testów jednostkowych, aby zastąpić testy integracyjne. Możesz pomóc w tym procesie:
- Użyj fałszywego frameworka zamiast prawdziwego zasobu. Rspec ma wbudowany framework do mockowania.
- Uruchom rcov na swoim zestawie testów jednostkowych. Użyj tego, aby ocenić, jak dokładny jest twój zestaw testów jednostkowych.
Gdy masz już odpowiednie testy jednostkowe, które zastąpią test integracji - usuń test integracji. Podwójne testowanie tylko pogarsza konserwację.
3. Nie używaj urządzeń
Urządzenia są złe. Zamiast tego użyj fabryki (mechanika lub robota fabrycznego). Systemy te mogą budować bardziej adaptowalne wykresy danych, a co ważniejsze, mogą budować obiekty w pamięci, których możesz używać, zamiast ładować rzeczy z zewnętrznego źródła danych.
4. Dodaj kontrole, aby powstrzymać testy jednostkowe jako testy integracji
Teraz, gdy masz już szybsze testy, czas na sprawdzenie, aby to ZATRZYMAĆ.
Istnieją biblioteki, które małpa poprawiają rekord aktywny, aby zgłosić błąd podczas próby uzyskania dostępu do bazy danych (UnitRecord).
Możesz także spróbować parowania i TDD, które mogą zmusić Twój zespół do pisania szybszych testów, ponieważ:
- Ktoś sprawdza - żeby nikt nie był leniwy
- Właściwe TDD wymaga szybkiej informacji zwrotnej. Powolne testy sprawiają, że cała sprawa jest bolesna.
5. Użyj innych bibliotek, aby rozwiązać problem
Ktoś wspomniał o spork (przyspiesza ładowanie zestawu testów pod szynami3), hydra / parallel_tests - aby uruchomić testy jednostkowe równolegle (na wielu rdzeniach).
Prawdopodobnie powinno to być używane OSTATNIE. Twój prawdziwy problem pojawia się w kroku 1, 2, 3. Rozwiąż go, a będziesz w lepszej pozycji do odgrywania dodatkowej infrastruktury.