Testowanie dodawania użytkownika do bazy

0

Hej!

Nie do końca wiem czy ten test jest dobrze napisany?


 @Test
    public void shouldCreateUser(){
        UserDto postUserDto = PostUserDto.builder()
                .username("user")
                .email("[email protected]")
                .password("password")
                .build();

        UserDto postUserDto2 = PostUserDto.builder()
                .username("user2")
                .email("[email protected]")
                .password("password2")
                .build();

        User user1 = accountCreator.createUser(postUserDto);
        User user2 = accountCreator.createUser(postUserDto2);

        when(userRepository.findAll()).thenReturn(Arrays.asList(user1,user2));

        List<User> users = userRepository.findAll();

        assertEquals(2, users.size());
    }

Chciałam stestwoać dodanie użytkownika do bazy, używając mockito to symulacji repository (?)
Jednakże nie do końca rozumiem co tak na prawdę testuję, ponieważ tak czy siak sobie "ustawiam" przez:

        when(userRepository.findAll()).thenReturn(Arrays.asList(user1,user2));

Nie do końca jestem przekonana czy taki test ma jakikolwiek sens? Przez co wydaje mi się że jest niepoprawny.
Za wszelkie wskazówki z góry dziękuje!

0

Słusznie Ci się wydaje, że takie ustawianie danych nie ma sensu, ponieważ w ten sposób testujesz Mockito a nie swój kod. Mockito nie ma tu najmniejszego sensu. Testuj na prawdziwej bazie danych tylko do testów albo na bazie danych w pamięci - na przykład H2.

Też zamiast testować odczytywanie danych lepiej testować zachowania. Przykładowo.

@Test public void savedUsersCanBeFound() {
  User user1, user2;

  repository.save(user1);
  repository.save(user2);

  assertThat(repository.findAll()).containsAll(user1, user2);
}
0

Dobrze ci się wydaje - to nie ma żadnego sensu.Jeśli UserRepository jest repozytorium Spring Data, to ten test ma jeszcze mniej sensu.

0

W takim razie jak powinnam to stestować?
Jak próbuje wstrzykiwać :

    @Autowired
    private UserRepository userRepository;

to potem jak sobie debuguje to jest napsiane, że

userRepository = null
0

Dałam nad testem @RunWith(SpringRunner.class) i zaczęło działać, ale nie wiem czy to dobry sposób bo teraz odpala się mi test razem z aplikacją

0

Anyway.. Jakby ktoś mógł mi powiedzieć jak powinien wyglądać poprawny test sprawdzenia dodania użytkownika do bazy?
W moim przypadku dodawanie jest w klasie AccountCreate, jak mam to stestować?

0

Chyba nie kminisz jak działa Spring - jak chcesz chcesz korzystać z **Autowired **i IoC bez odpalania kontenera Springa?

Jeśli chcesz testować metodę z Spring Data lub czysty SQL, to od powiem ci, że według mnie to nie ma sensu. Jeśli napisałaś np. jakieś query w HQL, to prędzej, ale to dyskusyjne. Przemyśl sobie, co właściwie takim testem przetestujesz - framework do persystencji, składnie SQL, czy właściwie co? Pokaż może metodę createUser(), to może coś więcej ci powiemy.

0
CountZero napisał(a):

Chyba nie kminisz jak działa Spring - jak chcesz chcesz korzystać z **Autowired **i IoC bez odpalania kontenera Springa?

Jeśli chcesz testować metodę z Spring Data lub czysty SQL, to od powiem ci, że według mnie to nie ma sensu. Jeśli napisałaś np. jakieś query w HQL, to prędzej, ale to dyskusyjne. Przemyśl sobie, co właściwie takim testem przetestujesz - framework do persystencji, składnie SQL, czy właściwie co? Pokaż może metodę createUser(), to może coś więcej ci powiemy.

Już chyba rozumiem.
Jak chce testować dodawanie użytkowników do bazy etc. to jestem zmuszona testować na odpalonej aplikacji @RunWith(SpringRunner.class).
Jak mam rozumiec mockowanie przydaje się w momencie w którym chcemy przetestować jakąś logikę biznesową, dlatego przed tym mockujemy sobie jakieś zachowania, tak?

0

Nie odpalasz aplikacji a kontener Springa link

No na przykład, mockuje się zazwyczaj w testach jednostkowych.

0
CountZero napisał(a):

Nie odpalasz aplikacji a kontener Springa link

No na przykład, mockuje się zazwyczaj w testach jednostkowych.

No dobrze, odpalam kontener springa, ale z tą adnotacją rusza cała aplikacja przed odpaleniem testów :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1