Wpis z mikrobloga

Czy w testach powinienem tworzyć zmienne?
Mam taki test:

@test
void whenUserExist_DeleteUserSessions() {
delete.deleteUserById(1);
assertThat(sessionChecker.hasActiveSession(1)).isFalse();
}

Doszedłem do wniosku, że do końca może nie być wiadome, co oznacza liczba „1” w tej asercji, więc postanowiłem ją zmienić na:

@test
void whenUserExist_DeleteUserSessions() {
int userId = 1;
delete.deleteUserById(1);
assertThat(sessionChecker.hasActiveSession(userId)).isFalse();
}

Co myślicie? Jaka jest Wasza opinia nt. zmiennych w testach?
#naukaprogramowania #java
  • 21
  • Odpowiedz
  • 0
@JoeGlodomor: mój błąd nie zmieniłem "1" na zmienną "userId". Miało być tak:

@test
void whenUserExist_DeleteUserSessions() {
int userId = 1;
delete.deleteUserById(userId);
assertThat(sessionChecker.hasActiveSession(userId)).isFalse();
}
  • Odpowiedz
@Kamishimi: Obczaj sobie i podepnij do projektu SonarLinta. Fajnie pokazuje konwencje nazewnicze w Javie, bo o ile może językowo jest poprawny Twój kod, to jednak oczy bolą xD

To jest zasada o której pisałem: https://rules.sonarsource.com/java/type/Code%20Smell/RSPEC-3578/

(Chociaż według Google Java Spec według nich underscore w nazwach metod testowych jest ok...)

A co do tego czy możesz używać zmiennej, to już naprawdę zależy. Jak metody nie są jasne to lepiej używać (albo jak
  • Odpowiedz
@Kamishimi: w tym wypadku jeden pies, trzeba miec IQ buta zeby nie skleic ze ta 1 jest userId jezeli metoda nazywa sie "deleteUserById" :) <- EDIT: spojrzalem ze uzywasz tej jedynki w dwoch miejscach, mozna wrzucic w zmienna zeby chociazby wyeliminowac prawdopodobienstwo pomylki jakbys cos zmienial w testach (np pewnego dnia postanowisz ze ten test bedzie usuwal jednak usera o id 2 xD)

@PolishPsycho akurat w testach uzywanie underscore np w
  • Odpowiedz
@Kamishimi: Nie tylko zmienne ale często nawet stałe. A jak coś się powtarza w kilku miejscach, to dobrze jest stworzyć interface, w którym będziesz przechowywał stałe dostępne dla wszystkich testów w aplikacji.
  • Odpowiedz
Czy w testach powinienem tworzyć zmienne?


@Kamishimi: Nie, jest to absolutnie zabronione, za każdym razem jak używasz zmiennej w teście JVM eksploduje i zabija małego kotka. ( ͡ ͜ʖ ͡)

Testy to kod jak każdy inny. Jeżeli użycie zmiennej zwiększy czytelność kodu albo pozwoli ci zachować DRY (Don't Repeat Yourself) to śmiało.
  • Odpowiedz