Wpis z mikrobloga

Zaczynam przygodę z PHP Unit.

http://pastebin.com/WA53hfGY

Moglibyście powiedzieć, czy metody tej klasy są testowalne? (tak, tak, wiem, że najpierw powinno się pisać testy...)

I ew. troszkę podpowiedzieć co tam testować i jak zmockować te dwa repozytoria?

A może jakoś inaczej muszę napisać tę klasę?

#php #laravel #phpunit
  • 14
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

0. Będziesz wiedział czy jest testowalne jak spróbujesz napisać testy.

1.

$fees
ustaw na prywatne i dorzuć gettera (żeby nie można było nadpisać z zewnątrz).
  • Odpowiedz
3. Unikaj żonglowania ID po kodzie – programowanie obiektowe polega na tym, że sobie przekazujesz obiekty ;-)


@MacDada: @Atomic_Cookie:

Ok, załóżmy, że zmieniam te 2 metody, tak, żeby akceptowały obiekty, a nie ID.

Tylko gdzie wtedy przenieść pobieranie tych obiektów (jak np. $this->airportRepository->getById($airport_id);)? Z powrotem do kontrolera?
  • Odpowiedz
@kot1401: Przecież jest skinny. Pobieranie realizujesz za pomocą zewnętrznej klasy - w tym wypadku repozytorium. Jak Twój kontroler ma więcej niż 10-15LOC, albo zawiera jakąś kluczową funkcjonalność, której nie powinien mieć - wtedy należy refaktoryzować. Kluczowa funkcjonalność czyt. coś co powinno zostać przetestowane jednostkowo i być w modelu a nie w kontrolerze. Imo ta zasada skinny controller fat model odnosi się do tego, żeby model był jak najbardziej niezależny od
  • Odpowiedz
@kot1401: I równie dobrze możesz stworzyć nową klasę 'AirportblablaHandler' która by przyjmowała request jako argument i wrzucić tam cały kod kontrolera - i odwoływać się z kontrolera do tej klasy. Ale czy to ma sens? Niektórzy za bardzo biorą do serca to skinny controller, a jest granica której nie przekroczysz.
  • Odpowiedz
@Atomic_Cookie: No dobrze, przeniosłem pobieranie obiektów do kontrollera.

Tylko teraz nie mogę wykonywać operacji na repozytoriach wewntątrz klasy z serwisem :/

Call to undefined method Illuminate\Database\Query\Builder::signDeal()
  • Odpowiedz