Jak nazywać testy (a jak nie)?
Dlaczego nazwy metod testów są tak istotne?
Ponieważ będziemy widzieć je o wiele częściej niż nazwy innych metod.
Jednakowo z poziomu IDE, w raportach wykonanych testów na serwerze CI/CD, czy powiadomieniach e-mail/komunikatorów o nie przechodzących testach.
Czytelność kodu wpływa na to, czy łatwo będzie powrócić do napisanego kodu po dłuższej przerwie.
Konwencja, którą przyjmiesz, powinna ułatwić czytelność, nawigację w kodzie oraz mówić, jak dany test działa i co testuje. Bez zaglądania w implementację.
Nazwy testów powinny być zrozumiałe dla każdego członka zespołu.
Dotyczy to nawet tych osób, które nie programują: Scrum Master, Project Manager, Project Owner, UX designer czy tester manualny.
Jak nie nazywać testów?
Mogą to być poniższe propozycje:
- logowanie poprawnymi danymi
- logowanie niepoprawnymi danymi
- próba logowania bez podania hasła.
- loginTest1
- loginTest2
- loginTest3
Takie nazwy testów są nieczytelne i nie mówią nam nic na temat tego, co dokładnie testują.
Nazwy testów powinny opisywać działanie testowanego komponentu, bez zgłębiania się w implementacje testów.
Właśnie dlatego nazwy testów są o wiele dłuższe od standardowych nazw metod.
Konwencja nazewnicza
Najpopularniejsza konwencja nazewnicza dla testów powstaje według wzoru:
NazwaTestowanejFunkcjonalności_OczekiwanyStan/DaneWejściowe_OczekiwanyWynik
Tak nazywałyby się nasze testy panelu logowania:
- loginForm_WhenCredentialsAreCorrect_ShouldLogin
- loginForm_WhenCredentialsAreIncorrect_ShouldAppearErrorMessage
- loginForm_WhenOnlyEmailGiven_ShouldDisableLoginButton
Co jeszcze możesz zrobić, aby testy były bardziej czytelne?
Uzyć notacji snake_case zamiast camelCase.
Notacja camelCase jest standardem w wielu językach np. w Javie, ale ciężko czyta się nazwy testów, które mają długą nazwę.
Jeśli użylibyśmy snake_case to nazwy testów wyglądałyby w ten sposób:
- login_form_when_credentials_are_correct_should_login
- login_form_when_credentials_are_incorrect_should_appear_error_message
- login_form_when_only_email_given_should_disable_login_button
Nasze testy są już bardziej czytelne, ale możemy zrobić jeszcze kilka rzeczy…
- when_credentials_are_correct_should_login
- when_credentials_are_incorrect_should_appear_error_message
- when_only_email_given_should_disable_login_button
- login_when_credentials_are_correct
- appear_error_message_when_credentials_are_incorrect
- disable_login_button_when_only_email_given
- o wiele większą czytelność nazw
- nazwy są zrozumiałe dla każdego członka zespołu
- stworzyliśmy dokumentację o danej funkcjonalności.
PODSUMOWANIE
Nie. Możesz użyć innej konwencji i nie ma w tym nic złego.
Ważne, żeby nazwy testów ułatwiały Ci pracę oraz przyspieszyły wdrożenie nowych pracowników w projekt.
W obecnych projektach dla klienta jednakowo dla API oraz E2E testów używamy notacji camelCase.
Nie jest to rozwiązanie idealne.
Ma swoje minusy.
Na koniec szybkie pytanie do Ciebie…
Koniecznie daj znać w komentarzu!
Bardzo fajny artykuł, dla mnie juniora – bezcenna wiedza 😉
Dzięki za miłe słowa. Mam nadzieje, że następne wpisy też Ci się spodobają. 🙂