Wybaczcie moją ignorancję, ale nie potrafię zrozumieć podstaw, na czym polega mockowanie interfejsu czy klasy w celu symulowania pobierania danych z bazy danych?
Idea mockowania polega na tym, że test jednostkowy musi się wykonywać w izolacji od środowiska. Nie ma więc mowy o połączenu się z bazą danych. Aby możliwe było wytestowanie usługi wykorzystującej bazę koniecznie jest dostarczenie zastępczych danych, aby móc wytestować logikę (np. własnej kolekcji, zamiast kolekcji pobranej z ORMa). Aby dane można było łatwo mockować (kod był testowalny jednostkowo) używa się dependency injection. W tym przypadku usługa pobierająca dane z bazy jest zastąpiona mockiem (którego zachowanie sam konfigurujesz, w zależności od potrzeb testu). Skupiasz się natomiat na wytestowaniu Twojego kodu, lecz zamiast zależności (czyli obiektów wstrzykiwanych np. za pomocą @Autowired, @Inject lub @ejb) wstawiasz mocki. Dzięki temu uzyskujesz izolację testu od innych obiektów, co jest pożądane w unit testach.
Mocki umożliwiają też testowanie interakcji, czyli sprawdzenie czy obiekt testowany zawołał zależność z konkretnymi parametrami, ile razy itp. To się bardzo często przydaje (verify).
Poczytaj o Mockito.
Czy można zapisywać dane w aplikacji Javy bez bazy danych i innym sposobem niż zapisywanie np. do XML-a?
Plik binarny.
Dane można trzymać bezpośrednio w klasie Mocka.
Np w statycznej tablicy/kolekcji. W końcu to dane statyczne, które przy każdym wywołaniu testu mają być identyczne.
Jeżeli chodzi o baze bez bazy to próbowałeś może baz typu h2o?
Praktyczne do zastosowania w testach.