Czy taki test ma sens?
Nie ma sensu. Testujesz Mockito czy dobrze działa. Szczepan Faber będzie zadowolony.
Nie mam pomysłu jak je przetestować. Chciałem zrobić np. taki test
repo.wstawJakasWartosc(wartosc);
i sprawdzać czy rozmiar kolekcji się zwiększa. Ale kolekcje w repo są private, to się do nich nie dostane żeby sprawdzić rozmiar.
Bardzo dobrze, że są prywatne. Pytanie czy nie potrzebujesz przetestować zachowania, które to zachowanie można opisać w następujący sposób:
Po dodaniu obiektu do repozytorium można ten obiekt odnaleźć w repozytorium.
Czyli w takim wypadku test będzie wyglądać w następujący sposób:
@Test
public void shouldFindElementAfterAddItToRepository(){
Wartość w = new Wartość("…");
repo.wstawWartość(w);
Assertions.assertThat(repo.znajdź(w)).isNotNull().isEqulaTo(w);
}
Zauważ, że test obejmuje zachowanie i nie wnika w jaki sposób zaimplementowano metody wstawWartość
i znajdź
. Pod spodem może być kolekcja, ale może też być tradycyjna baza danych.
W sumie nawet nie wiem jak główny program przetestować.
Server.main(); nie odpala bo po drodze ma masę przeszkód które z poziomu testu nie działają bo np. nie znajduje pliku z resourcami.
To znaczy, że jest źle napisany w tym sensie, że trudno go użyć inaczej niż w „jedyny słuszny sposób”. Pomyśl co będzie, jak będziesz chciał zmienić w jakiś implementację, albo sposób użycia. Czy ograniczenia, które spotkałeś w testach nie spowodują, późniejszych problemów gdy będziesz chciał coś zmienić w kodzie.
Większość metod w klasie servera też jest prywatnych więc nie ma do nich dostępu w testach.
To bardzo dobrze, bo publiczne powinny być tylko te metody, które będą używane przez twoich użytkowników. Pisanie testów weryfikuje czy rzeczywisty sposób użycia jest prosty i spójny czy też wymaga od klienta jakiejś ekwilibrystyki. Ogólnie można założyć, że test to przykład kodu klienckiego. Jeżeli ty nie potrafisz użyć swojego kodu, to co ma powiedzieć klient?