Testy jednostkowe

Odpowiedz Nowy wątek
2019-05-24 09:05

Rejestracja: 6 lat temu

Ostatnio: 41 minut temu

Lokalizacja: Nowa Ruda

0

Witajcie. Piszę sobie api. Korzystam z mediatR. Czyli handlery itp. No i powiedzmy, że mam opcje tworzenia użytkownika. Czyli mam Command z danymi usera, następnie przed uruchomieniem handlera jest robiona walidacja command (FluentValidation: ilość znaków, email itp). Jeśli walidacja przejdzie to command trafia do handlera. Do handlera wstrzykuje CreateUserService z metodą generyczną (bo mam różne typy obiektu user) i powiedzmy SendEmailService. No i jak tworzę sobię obiekt Usera to już nie sprawdzam poprawności danych (było sprawdzone wcześniej). No i teraz testy. Czy powinienem założyć w testach, że do np CreateServiceUser trafią poprawne dane i tak to testować? Poprawne mam namyśli odpowiednie znaki, prawidłowy email. Czyli te rzeczy, które np UserManager nie wychwyci.
Zrobiłem sobie testy klasy CreateUserService. I np przekazuje w userze email taki: "Test1 @test.pl". Czyli generelanie nie poprawny format bo jest spacja. Ale UserManager mi to przepuszcza w testach (Nie robię, żadnch mocków, działa na EF in Memory). Ale jakbym takie coś testował na żywym api to nie przejdzie. Czyli wywali się już na fluentvalidation.

Pozostało 580 znaków

2019-05-24 10:17

Rejestracja: 5 lat temu

Ostatnio: 3 minuty temu

Lokalizacja: Poznań

2

Zależy który kawałek chcesz przetestować. Jeśli w teście sprawdzasz tylko to co się dzieje już po walidacji, to dane powinny być poprawne (bo przecież nie sprawdzasz tu walidacji, tylko dalszą logikę)


Spring? Ja tam wole mieć kontrole nad kodem ᕙ(ꔢ)ᕗ
Haste - mała biblioteka do testów z czasem.

Pozostało 580 znaków

2019-05-24 10:48

Rejestracja: 17 lat temu

Ostatnio: 23 minuty temu

Lokalizacja: Kraków

1

To raczej odwieczny problem z tym gdzie i jak robić walidację. I jeśli zdecydujemy się robić walidację w warstwie widoku (api), to czy powinniśmy powielać te same reguły w warstwach niżej (serwisy domenowe).


It's easy to hate code you didn't write, without an understanding of the context in which it was written.

Pozostało 580 znaków

2019-05-24 10:51
Moderator

Rejestracja: 16 lat temu

Ostatnio: 5 godzin temu

1

Trochę dziwne pytanie. Przecież testujesz swój kod który masz napisany! Co najwyżej mógłbyś się zastanawiać czy w takim razie przeprowadzasz walidacje w dobrym miejscu, albo czy piszesz test na odpowiednim poziomie abstrakcji.
Może obok tych unit testów powinny być też testy integracyjne/e2e, które faktycznie stawiają tą aplikacje i puszczają requesty HTTP i walidują czy wszystko działa tak jak powinno? ;)


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2019-05-25 01:14
Moderator

Rejestracja: 12 lat temu

Ostatnio: 7 godzin temu

Lokalizacja: Wrocław

3
szydlak napisał(a):

Czy powinienem założyć w testach, że do np CreateServiceUser trafią poprawne dane i tak to testować? Poprawne mam namyśli odpowiednie znaki, prawidłowy email.

Skoro taką masz architekturę, i tak to będzie działało przy faktycznym korzystaniu z aplikacji, to owszem.

Zrobiłem sobie testy klasy CreateUserService. I np przekazuje w userze email taki: "Test1 @test.pl". Czyli generelanie nie poprawny format bo jest spacja. Ale UserManager mi to przepuszcza w testach

No i dobrze. Zadaniem tego serwisu jest jak rozumiem wstawienie do bazy i wysłanie maila, a nie walidacja.


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2019-05-25 10:24

Rejestracja: 1 rok temu

Ostatnio: 1 rok temu

0
neves napisał(a):

To raczej odwieczny problem z tym gdzie i jak robić walidację. I jeśli zdecydujemy się robić walidację w warstwie widoku (api), to czy powinniśmy powielać te same reguły w warstwach niżej (serwisy domenowe).

Jeśli w module numer 1 dwie klasy, które posiadają inne efekty uboczne, implementują ten samy interfejs. To skąd osobą, która chce się komunikować z tym modułem ma się dowiedzieć o konsekwencjach związanymi z tymi efektami ubocznymi. Z walidacji w kliencie.?

@szydlak Uważam, że masz problem z architektura a nie testowaniem.

Shalom napisał(a):

Trochę dziwne pytanie. Przecież testujesz swój kod który masz napisany! Co najwyżej mógłbyś się zastanawiać czy w takim razie przeprowadzasz walidacje w dobrym miejscu, albo czy piszesz test na odpowiednim poziomie abstrakcji.
Może obok tych unit testów powinny być też testy integracyjne/e2e, które faktycznie stawiają tą aplikacje i puszczają requesty HTTP i walidują czy wszystko działa tak jak powinno? ;)

Jeśli spójności transakcyjnej obiektu domenowego pilnuje walidacja poziomu wyżej, to znaczy, że ma przełamaną hermetyzację. A nie że przeprowadza walidację w złym miejscu.


Unhandled Exception: System.MissingMethodException: Constructor on type 'System.Exception' not found.
edytowany 3x, ostatnio: Gworys, 2019-05-25 16:39
@superdurszlak Uważam, że masz problem z architektura a nie testowaniem. ale czemu ja? :D - superdurszlak 2019-05-25 12:13
O sory miałem na myśli. @szydlak :D Jeszcze się nie obudziłem... :D - Gworys 2019-05-25 12:25

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0