Dzięki TDD, wiem że piszę brzydki kod

0

Ostatnio stwierdziłem, że spróbuję stworzyć testy do już istniejącego kodu (dopiero zaczynam z TDD), który napisałem, ale się okazało, że jest to niemożliwe. Pierwsza myśl, była taka, że mimo iż na pierwszy rzut oka wydawało mi się, że napisałem sensowny kod, to skoro nie jestem w stanie go przetestować to coś tu nie gra. Trochę pogooglowałem i moje obawy się potwierdziły, że jeżeli przy testach trzeba cudować, to znaczy że jest jakiś code smell.

W pracy nie mam do czynienia z TDD, a kod też jest bardzo syfiasty, więc brakuje mi punktu odniesienia. Mam do Was prośbę, żebyście zerkneli na załączoną klasę i podpowiedzieli mi jak Wy byście ją przetestowali. Załączam również kod klasy testowej, czyli tego co mi udało się wymyślić. Trochę tego mało patrząc na ilość metod.

0

Wrzuć ten kod na pastebina.

1

No bo z definicji najpierw się pisze te testy, później implementuje kod, później refaktoryzacja. I tutaj można by się tylko zastanawiać czy nie lepiej od razu implementować dobrej jakości kod, zgodnie ze standardami.

W klasie używasz curl-a do połączeń z zewnętrznymi serwisami (OK) ale Laravel ma od tego już swoje klasy:

http://stackoverflow.com/questions/22355828/doing-http-requests-from-laravel-to-an-external-api

albo są zewnętrzne pakiety (podane tam GuzzleHTTP) które instalujesz.

Na laracastach coś jest na temat TDD ale płatne, na githubie też są jakieś przykłady.

0

@drorat1 wiem, ale chodziło o to, żebym zaimplementował to sam i szczerze to akurat mi przyszło do głowy. Generalnie chodziło o to, żeby zmierzyć czas ładowania remote serwisu.

Nie zaczynałem od TDD, bo wiem że jest to niestety jeszcze moja słaba strona, dlatego z taktycznego punktu widzenia wolałem zrobić zadanie niż utknąc na TDD. Zostało mi czasu, więc stwierdzilem, że spróbuję podejścia trochę z tyłka strony i napiszę testy, ale szybko się zorientowałem, że poza tym co wkleiłem jest wręcz niemożliwe stworzenie czegoś innego w łatwy sposób (bez użycia reflection class) z uwagi na 99% metod prywatnych i to spowodowało zadanie tego pytania.

1

Na laracastach coś jest na temat TDD ale płatne, na githubie też są jakieś przykłady.

Jest, ale niestety w większości przykładów jest to na zasadzie tłumaczenia OOP:
oop.jpg

0

Nie no bez przesady ten kod nie jest znowu taki zły.
Problem leży raczej po stronie braku wiedzy jak się pisze testy i jak się robi mock-i.
Mało tego powiedziałbym, że kod wygląda bardzo dobrze.
Nie mogę pomóc, bo PHP jest mi obce, ale znajdzie się tu ktoś kto pomoże ci napisać dobry test.

0

Dokładnie o to chodzi. Jak bym mial prawidlowy wzorzec, to już bym sobie dalej poradził i byłoby dużo łatwiej.

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