Wpis z mikrobloga

Cześć, potrzebuję porady. Podczas logowania tworzę w bazie danych sesję użytkownika. Chcę napisać test dla logout, w którym sprawdzę, czy po wylogowaniu sesja została usunięta. Mam takie dwie propozycje.

1. Pierwsza:

@test
void whenLogoutSuccess_DeleteSession() throws Exception {
Cookie sessionCookie = logoutHelper.loginAndGetCookie();

String sessionId = tokenGenerator.generateHashedToken(sessionCookie.getValue());

mockMvc.perform(post("/api/v1/users/logout").cookie(sessionCookie))
.andExpect(status().isOk());

assertThat(session.sessionExist(sessionId)).isFalse();
}

2. Druga:

@test
void whenLogoutSuccess_DeleteSession() throws Exception {
Cookie sessionCookie = logoutHelper.loginAndGetCookie();

String sessionId = tokenGenerator.generateHashedToken(sessionCookie.getValue());

assertThat(session.sessionExist(sessionId)).isTrue();

mockMvc.perform(post("/api/v1/users/logout").cookie(sessionCookie))
.andExpect(status().isOk());

assertThat(session.sessionExist(sessionId)).isFalse();
}

Zastanawiam się, czy w teście powinienem sprawdzić, czy po zalogowaniu sesja istnieje - co nie jest celem testu, ponieważ chcę sprawdzić, czy sesja została usunięta, czy zrobić tak jak w przykładzie pierwszym.
#java #programowanie #naukaprogramowania
  • 3
@Kamishimi: 1.

2. to dobry przykład ale na test integracyjny, w którym sprawdzasz czy przejście całego procesu login -> logout działa poprawnie.

W 1. wychodzisz z założenia że metoda logoutHelper.loginAndGetCookie(); działa prawidłowo, co powinno być sprawdzone testami tej metody w klasie LogoutHelperTest czy jakkolwiek się tam nazywa.
Ogólnie w given, lepiej nie używać assertów, ale czasami jednak trzeba się upewnić że coś daje efekt. Dlatego wolę 2 przykład. Ogólnie też używasz i api i wnętrzności apki (session/tokenGenerator). Jak się da, to lepiej zrobić wszystko przez api

-login
-sprawdzenie sesji #1 (używając api)
-logout
-sprawdzenie sesji #2

i sprawdzasz, że #1 zwraca 200, a #2 403