Dlaczego pisząc testy, dlaczego ktoś chciałby korzystać z bazy danych w pamięci, a nie tylko wyśmiewać dane?
Widziałem, że bazy danych w pamięci mogą być przydatne do testowania własnych repozytoriów. Ale jeśli używasz frameworka (takiego jak Spring Data), testowanie repozytoriów byłoby testowaniem frameworku, a nie logiki aplikacji.
Wyśmiewanie wydaje się jednak szybsze i opiera się na tym samym schemacie, który zwykle stosuje się podczas pisania testów jednostkowych i TDD.
Więc czego mi brakuje? Kiedy / dlaczego baza danych w pamięci byłaby korzystna?
W większości przypadków testowanie bazy danych w pamięci jest prostsze niż wyśmiewanie. Jest również o wiele bardziej elastyczny. Testuje także, czy pliki migracji są wykonywane dobrze (gdy istnieją pliki migracji).
Zobacz ten pseudo kod:
InMemoryTest
Nie zależy od tego, jakDatabase
jest realizowana wUserRepository
celu pracy. Po prostu używaUserRepository
publicznego interfejsu (create
), a następnie zapewnia przeciwko niemu. Ten test nie zostanie przerwany, jeśli zmienisz implementację, ale będzie wolniejszy.Tymczasem w
MockingDBTest
pełni polega na tym, w jaki sposóbDatabase
jest wdrażanyUserRepository
. W rzeczywistości, jeśli zmienisz implementację, ale nadal sprawisz, że będzie działać w inny sposób, test się zepsuje.Najlepszym z obu światów byłoby użycie fałszywej implementacji
Database
interfejsu:Jest to o wiele bardziej wyraziste, łatwiejsze do odczytania i zrozumienia i nie zależy od implementacji rzeczywistej bazy danych wykonanej w wyższych warstwach kodu.
źródło