PHPUnit "zagnieżdżone" mocki |
PHPUnit "zagnieżdżone" mocki |
11.02.2016, 15:47:13
Post
#1
|
|
Grupa: Zarejestrowani Postów: 148 Pomógł: 14 Dołączył: 23.02.2013 Ostrzeżenie: (0%) |
Sprawdzam sobie działanie mocków w PHPUnit 5.2.3. Mam pewien problem z "zagnieżdżonymi" mockami, kod wygląda tak:
Test wygląda tak:
Dostaję taki komunikat: Cytat 1) EntityTest::testEntityDescendantCanBeSet Expectation failed for method name is equal to <string:setAncestor> when invoked 1 time(s). Method was expected to be called 1 times, actually called 0 times. Podobny komunikat jest dla getName jeśli test setAncestor jest zakomentowany. Co jest nie tak i jak to można przetestować? -------------------- |
|
|
11.02.2016, 16:55:30
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) |
Utworzyłeś mocka, więc wywołanie metody addDescendant nie robi nic - nie wywołuje Twojego kodu. I tutaj należy zauważyć, że źle podchodzisz do tematu:
1. W miarę możliwości staraj się unikać tworzenia mocków. 2. Skoro testujesz tutaj klasę Entity, a jest on abstrakcyjna utwórz sobie nic nie robiącą jej implementację (class DummyEntity extends Entity { }) i korzystaj z jej obiektów. 3. Testuj kontrakt klasy, a nie jej implementację. Czasami faktycznie istotne jest to ile razy dana metoda została wywołana itp. itd., ale tutaj to nie ma znaczenia. To co w tym kodzie jest istotne to to czy: 3.1. Konstruktor faktycznie ustawia nazwę klasy zwracaną przez getName().
3.2. addDescendant() dodaje obiekt jako dziecko i ustawia temu dziecku rodzica na siebie samego.
Co Cię interesuje ile razy getName() było wywołane? Jakie to ma znaczenie tutaj? |
|
|
19.02.2016, 08:21:46
Post
#3
|
|
Grupa: Zarejestrowani Postów: 872 Pomógł: 94 Dołączył: 31.03.2010 Ostrzeżenie: (0%) |
W php7 z pomocą przychodzą klasy anonimowe, np.
Edit: To samo dotyczy klas nieabstrakcyjnych, zamiast tworzyć mocki możesz tworzyć klasy anonimowe, które po nich dziedziczą. Ten post edytował lukaskolista 19.02.2016, 08:23:40 |
|
|
Wersja Lo-Fi | Aktualny czas: 27.04.2024 - 15:45 |