Wpis z mikrobloga

Hejka Miraski z #programowanie, problem mam w #java #spring , ale dotyczy generalnie #testowanieoprogramowania
Robię apkę, zwykłe CRUD restowe, zwykłe controler, serwis i repoztytorium. Generalnie logiki mało, ale dużo wyciągania z różnych baz danych i jakoś mapowania, łączenia i tak dalej. Generalnie mało miejsca na testy jednostkowe logiki - bo logiki jako takiej praktycznie tam nie ma (tylko mapowanie danych z bazy, dociąganie z innej).

Kiedyś robiłem testy, że wysyłałem jakieś geta czy posta i sprawdzałem czy json w odpowiedzi jest tym czego potrzebuję. A za bazę danych robiło mi h2 czy inna pamięciowa, a model był generowany przez hibernate. Okazało się, że ma to wady jak zaczęły być zapytania specyficzne dla konkretnej bazy, jakieś triggery czy coś.
Później doszły też bazy danych, których tak łatwo nie da się zastąpić h2 typu elastic.

Zacząłem więc używać mocków, ale jak to na jeden z konferencji zostało powiedziane - wyszła mocksturbacja. Wszędzie mocki, wszystko pomockowane, testy przechodzą, ale nie działa bo coś się zmieniło, ale mocki się nie zmieniły.

Wpadłem więc na pomysł, żeby użyć testcontainers.org i postawić sobie te wszystkie bazy, załadować schemę za pomocą flywaya czy czegoś podobnego, w zależności od bazy. Niby działa, ale testy trwają z rok, środowisko CI wiecznie zamulone pobieraniem dockerów ciągle i ciągle tych samych (bo CI to docker, który uruchamia testy i docker in docker pobiera dockery z testcontenera, co push na dowolny brancz)

Jak żyć, co robić?
  • 6
@dupaztrupa: Z dobre 4 lata temu pisałem framework w java'ie do testów restowych, też typowe get/post i sprawdzanie jsona. Testy szły bardzo powoli. Rozwiązaniem było puszczanie testów w wielu wątkach równocześnie zamiast szerogowo w jednym wątku. Może to Ci podsunie jakoś pomysł.

Swoją drogą rozwiazanie z dockerem wydaje sie być spoko. Może zastanów się ,żeby CI nie triggerowała testow co push, a np. raz dzienie overnight. Ile macie pushy dziennie na
@rskk: Niby tak, szybciej się pobiorą dockery. Ale cała reszta wad dockera czyli powolne uruchamianie kontenerów wraz zostaje.

@kukoc18: Jak puszczałeś testy w wielu wątkach? Musisz mieć wtedy wiele baz danych albo jakoś transakcje dobre (przy nietransakcyjnych bazach tak się nie da) bo jak jeden test modyfikuje dane to drugi nie może ich odczytać
@dupaztrupa jeśli mówimy o transakcyjnych to może postaw kilka instancji albo je zesplitun tak aby kolejne testy nie musiały czekać na zakończenie poprzedniego. Może wąskim gardlem jest coś innego niż db?