szczrzcz
24.04.2017, 14:41:29
Czytam: Interfejsy ułatwiają testy jednostkowe.
W jakim sensie?
W dublerach (mock, stub) i tak muszę zdefiniować użyte metody (i/lub co zwracają), a dla reszty metod zwracany jest null.
Crozin
24.04.2017, 17:22:45
W przypadku PHP nie są one może niezbędne jak w niektórych platformach, ale nadal mają kilka zalet.
1. Zamiast wykorzystywać mocki/stuby w testach możesz skorzystać z "głupich implementacji", a w przypadku jakiś usług operujących na zew. zasobach z implementacji operujących w pamięci. Czy to samo da się osiągnąć przy pomocy wspomniach mocków/stubów? Generalnie tak, ale z wygodą często nie ma to nic wspólnego.
2. Rozsądnie zaplanowane interfejsy - czyli takie z małą liczbą metod - pozwalają na zmniejszenie liczby zależnośći. Często można mieć klasę implementującą kilka interfejsów. W momencie gdy testujemy coś wymagającego tylko jednego interfejsu tej klasy zmniejsza się liczba metod które wymagają mocków/stabów.
3. Poleganie na tym, że "dla reszty metod zwracany jest null" jest bardzo niebezpieczne na dłuższą metę i sprawia, że Twoje testy muszą mieć jakąś świadomść wewnętrznej implementacji testowanej klasy - a to lekko negatywnie wpływa na stabilność samych testów.