Wpis z mikrobloga

#java #spring

Jak robic unit testy springa? Z definicji unit testy sa szybkie (każdy powinien wykonywać się kilka ms, czyli łącznie w małym projekcie powinno to dać jakies pół sekundy do sekundy), co oznacza że musi się to odbywać bez odpalania springa. Zalinkuje ktoś jakieś materiały?

W sumie jeszcze jedno pytanie xD te testy to co maja testowac? na logike to powinny serwisy testowac, ale da sie w ten sposob controllery?

Czemu bez odpalania springa? Patrz: pic rel

Bruno_ - #java #spring

Jak robic unit testy springa? Z definicji unit testy sa szy...

źródło: comment_m0ITVXYvdWWxXxyb8O2qbUWzDiJO2mRt.jpg

Pobierz
  • 10
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Bruno_: unit testy testują najmniejsze mozliwe rzeczy, pojedyncze funkcje które np liczą ci ciąg fibonacciego czy inne bzdety. to o co pytasz to testy integracyjne, wtedy powinien sie odpalać caly spring z jakąs zaseedowaną bazką
  • Odpowiedz
@Pan_Qcek: znam roznice miedzy rodzajami testow, we wpisie bardziej mi chodzilo o to czy da sie zrobic unit testy controllera ale w sumie tak jak teraz mysle to integracyjny to by byl z definicji bo sprawdza integralnosc aplikacji czyli w sumie juz sobie sam odpowiedzialem i wpis jest bez sensu ale zostawie go dla potomnych xD
  • Odpowiedz
@Bruno_: Zgarniasz Mockito, uzywasz MockitoJUnitRunnera i testujesz każdy serwis osobno, mockując wszystkie jego zależności. W ten sposób w ogóle springa nie używasz a logika serwisowa jest przetestowana ładnie w izolacji.
  • Odpowiedz
@Bruno_: pisz tak, żeby jak najmniej używać springa. Wstrzykiwanie przez konstruktor bez kontenera IoC sprawia, że masz pełną kontrolę na swoimi zależnościami.

Zgarniasz Mockito, uzywasz MockitoJUnitRunnera i testujesz każdy serwis osobno, mockując wszystkie jego zależności. W ten sposób w ogóle springa nie używasz a logika serwisowa jest przetestowana ładnie w izolacji.


@Myzreal: i dzięki temu masz testy, które nic nie testują
  • Odpowiedz
@Pan_Qcek: Unit testy testują logikę biznesową, a nie "najmniejsze możliwe rzeczy". Jeżeli masz testy na poziomie fasady/serwisu/komponentu, ale nie wykonujesz operacji I/O (a zamiast tego pod spodem uderzasz np. do repozytorium, które jest w pamięci), to nadal takie testy są testami jednostkowymi (mimo że logika, którą testujesz, znacznie wykracza poza pojedyncze funkcje o których mówisz).

@Bruno_: Jeżeli chodzi o testowanie aplikacji Springowych to mam dla Ciebie dwie wiadomości:
  • Odpowiedz
@Saly: @zajety_login: xd no jak nic jak testują logikę zawartą w danym serwisie, czystą logikę właśnie. To testy jednostkowe. Jak chcesz (a powinieneś chcieć generalnie) potestować bardziej całościowo to testy integracyjne i wtedy stawiasz jakiś springowy kontener co by zamiast mocków były właściwe fasolki.

Jednostkowymi testujesz pojedyncze metody. Izolujesz się od wywołań wykraczających poza serwis ale testujesz różne przypadki, w tym takie że te wywołania wyrzucą exception, zwrócą
  • Odpowiedz
@Myzreal: Nie jestem pewien jak dosłownie mam traktować Twoje zdanie: "mockując wszystkie jego zależności". Zakładając że mamy następujący graf zależności:
* ProductController -> ProductFacade -> ProductService -> ProductRepository
to czy jeżeli testujesz ProductFacade, to czy ProductService jest zamockowany czy nie?
  • Odpowiedz
@krasnoludkolo: IMHO tak, chyba że to banalne klasy pomocnicze które można uznać za część testowanej klasy a wydzielone są tylko dla przejrzystości.

@zajety_login: Jeżeli jest to test jednostkowy to tak - zamockowany.

Ja sobie tego nie wymyślam panowie - pojęcie testów jednostkowych jest konkretnie zdefiniowane, jest o tym pierdyliard materiałów w sieci.
  • Odpowiedz