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ć? |
|
|
|
![]() |
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? |
|
|
|
Lion PHPUnit "zagnieżdżone" mocki 11.02.2016, 15:47:13
lukaskolista W php7 z pomocą przychodzą klasy anonimowe, np.
[P... 19.02.2016, 08:21:46 ![]() ![]() |
|
Aktualny czas: 28.12.2025 - 06:04 |