Nasz zespół ma setki testów integracyjnych, które trafiają do bazy danych i sprawdzają wyniki. Mam dwie klasy bazowe dla wszystkich testów integracyjnych, jedną dla testów tylko do odczytu i jedną dla testów tworzenia/aktualizacji/usuwania. Klasa bazowa tylko do odczytu regeneruje bazę danych podczas TestFixtureSetup, więc wykonuje się tylko raz dla każdej klasy testowej. Klasa bazowa CUD odnawia bazę danych przed każdym testem. Każda klasa repozytorium ma swoją własną odpowiednią klasę testową.Najlepsze praktyki testowania integracji
Jak można sobie wyobrazić, to cała sprawa zajmuje trochę czasu (zbliża się 7-8 minut biegać i szybko rośnie). Uruchomienie tego działania jako części naszego CI (CruiseControl.Net) nie stanowi problemu, ale uruchomienie lokalnie zajmuje dużo czasu i naprawdę uniemożliwia ich uruchomienie przed zatwierdzeniem kodu.
Moje pytanie brzmi: czy istnieją najlepsze praktyki, które pomogą przyspieszyć wykonywanie tego typu testów integracyjnych?
jestem w stanie wykonać je w pamięci (a la SQLite), ponieważ używamy jakąś specyficzną funkcjonalność bazy danych (obliczonych kolumn, itp), które nie są obsługiwane w SQLite.
Cały zespół musi być w stanie je wykonać, więc uruchomienie ich na lokalnej instancji SQL Server Express lub coś może być podatne na błędy, chyba że ciągi połączeń są takie same dla tych wystąpień.
W jaki sposób realizujesz to w swoim sklepie i co działa dobrze?
Dzięki!
+1 To prawie to, co robimy w mojej pracy. Na naszym CIS testy jednostkowe są przeprowadzane co każdy test i testy integracyjne raz dziennie. – mezoid
gdzie pracujemy uruchamiamy testy integracji dla każdej kompilacji. im częściej uruchamiasz testy integracyjne, tym lepiej. –
@Ken_Liu - na pewno. Często jest to równoważenie dostępnych cykli procesora na serwerze CI z liczbą zatwierdzeń w danym momencie. To będzie się różnić dla każdego zespołu/środowiska programistycznego. – grenade