Aplikacja Client-Server || Part 5 || Testy jednostkowe
🚀

Aplikacja Client-Server || Part 5 || Testy jednostkowe

notion image
 
 

Wprowadzenie


Nadszedł czas na moje pierwsze testy jednostkowe. Do nauki wykorzystałem moją aplikację Client-Server, którą stale rozbudowuję. W trakcie pisania testów, zorientowałem się, że mój kod jest niedoskonały i wymaga znacznej refaktoryzacji. Testy ujawniły brak niektórych funkcjonalności oraz fakt, że metody nie zwracały oczekiwanych wartości. Kod często był nietestowalny.

Ta lekcja pozwoliła mi zidentyfikować i naprawić wiele elementów aplikacji. Dzięki testom zrozumiałem, jak zrefaktoryzować kod, aby poprawić jego czytelność i organizację, a także dodać brakujące funkcjonalności. Po dokonanych zmianach w obrębie całej aplikacji na zaktualizowałem testy zapewniając, że program działa poprawnie i jest gotowy do dalszego rozwoju.

 
notion image
 

Wykonane prace


0. Link do repozytorium

Client-Server-Application
jakubBoneUpdated Sep 2, 2024

1. Integracja z narzędziami do testowania:

  • Dodanie bibliotek JUnit
  • Dodanie Mockito do symulowania zależności w testach klas odpowiedzialnych za połączenie C/S

1. Dodanie i stała aktualizacja testów jednostkowych:

  • Skupiłem się na klasach, które wg mnie były najistotniejsze do przetestowania: UserManager, MailBox, MailService, AccountUpdateHandler, ClientConnection, Client, ServerConnection, RequestFactory, Admin, JsonConverter, ServerRequestService

2. Poprawki w obrębie całego kodu na podstawie testów:

  • Na podstawie wadliwych wyników lub niewykonalnych testów wprowadziłem zmiany w kodzie:
    • Poprawki logiki, zmiany nazw zmiennych, metod oraz ich wartości zwracanych
    • Dodanie nowych getterów i setterów przy użyciu Lomboka
    • Izolacja logiki, w tym stworzenie metod pomocniczych w celu lepszej modularności i łatwiejszego testowania

3. Wprowadzenie nowych i poprawa istniejących testów:

  • Dodanie nowych klas testowych uwzględniajać powyższe zmiany w kodzie: AccountUpdateHandlerTest, ClientCommunicationTest, ClientTest, MailBoxTest, MailServiceTest, RequestServiceTest, ServerConnectionHandlerTest, JsonConverterTest, AdminTest
  • Refactoring testów poprzez poprawę nazw metod, usunięcie zbędnego kodu oraz uproszczenie logiki w celu zwiększenia czytelności i efektywności testów
 
notion image
 

Struktura kodu


Pakiety client oraz server:

  • Client - nawiązywanie połączenia, komunikacja z serwerem, logowanie, wysyłanie żądań
  • Server - nasłuchiwanie połączeń, obsługa żądań klientów

Pakiet mail:

  • Mail - reprezentuje wiadomość e-mail
  • MailBox - zarządzanie skrzynką pocztową użytkownika
  • MailService - operacje związane z e-mailami (wysyłanie, odbieranie, opróżnianie)

Pakiet user:

  • User - reprezentuje użytkownika, przechowuje dane użytkownika
  • Admin - użytkownik z rolą administratora, zarządzanie innymi użytkownikami
  • UserManager - zarządzanie rejestracją, logowaniem, uprawnieniami użytkowników

Pakiet utils:

  • JsonConverter - konwersja obiektów do/z formatu JSON
  • Screen - wyświetlanie menu w konsoli
  • UserInteraction - interakcja z użytkownikiem poprzez konsolę, pobieranie danych wejściowych od użytkownika
  • ResponseMessage - formatowanie i zarządzanie wiadomościami odpowiedzi

Pakiet request:

  • Request - reprezentuje specyficzne zapytanie
  • RequestFactory - tworzenie obiektów Request na podstawie typu żądania
  • RequestService - obsługa tworzenia i wysyłania żądań

Pakiet handler:

  • AuthHandler - obsługa rejestracji i logowania
  • ServerDetailsHandler - informacje o serwerze (czas działania, komendy)
  • MailboxHandler - operacje na skrzynkach pocztowych (czytanie, opróżnianie)
  • AccountUpdateHandler - zmiana haseł, usuwanie użytkowników, zmiana ról
  • WriteHandler - wysyłanie wiadomości e-mail
  • LogoutHandler - wylogowywanie użytkowników
  • AdminSwitchHandler - przełączanie użytkowników przez administratora
 
Video preview
 

Jakie dalsze plany?


1. Bazy danych z naciskiem na PostgreSQL

 
 
notion image