Zaślepić HttpClient

Zajawnik / Reklama

Testy jednostkowe to dobra sprawa – to oczywista oczywistość. Można o nich sporo pisać, można zobaczyć też co ja o nich piszę/mówie na udemy (https://www.udemy.com/course/wprowadzenie-do-testowania-dla-programistow-net/learn/lecture/13612678#overview) albo na kursy.jaroslawstadnicki.pl.

Czasem jednak chce się więcej, to że testy są na zielono nie oznacza jeszcze, że wszytko działa.

Tylko w ruscie, jak się skompilowało to można na proda wrzucać 😉

Integrować się chce

No ale ale, chce napisać, że marzy mi się taka sytuacja, że mogę sobie odpalić i szybko przetestować cały kod (prawie cały) od wejścia do zapisu. Większość rzeczy, z którymi pracuje, albo zaczyna się na http, albo kończy się na http, a ja nie chce nigdzie strzelać, chce to zaślepić i mieć pod kontrolą — jak?!

Dla przykładu wykorzystam oczywiście łatwy kawałek kodu, który posiada kilka warstw, trochę ma siłę, ale muszę jakoś przekazać to co chce osiągnąć.

Mięso:

Chlebek

Masełko

Po taniości; robię strzał do webapi które zaciąga z pogodoapi 👉 z repo 👉 z internetu pogodę. Aby móc testować, httpClient zostało wyrzucone do specjalnego ściągacza. W testach jednostkowych tego ściągacza moge zamokować i skupić się tylko na testowaniu pogodowego api. Tutaj tylko przykład validacji, tak aby było zielone.

Teraz chce, aby httpClient “naprawdę”

Wykonał strzał do internetu, ale aby odczytało dokładnie to, czego ja chce.

Mówię i mam:
Od góry:
Mock IHttpClientFactory, który zwróci normalnego HttpClienta — tutaj brakuje abstrakcji, ALE!
HttpClient powstanie z moim Mock<HttpMessageHandler>, który robi cuda; wszystko się rozbija o SendAsync — można odpowiedni setup zrobić (zakomentowany kod) albo sprawdzić na etapie Verify, gdzie sprawdzam, czy pogoda na pewno jest podawana dla mojej (ulubionej) zahardkodowanej pozycji. Plus czym ten obiekt zawiera takie informacje, jakie chciałem.

Tyle. Dziękuje, do widzenia — dziękuje za stackoverflow 🧡  🙂

 

 

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.