![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 279 Pomógł: 60 Dołączył: 25.02.2012 Ostrzeżenie: (0%) ![]() ![]() |
Testy jednostkowe w PHPUnit i PHP 5.3.
Mam następujące klasy (oczywiście to schemat z jedynie kluczowymi elementami kodu):
Teraz chodzi o to, że chcę przetestować czy FirstClass::testedMethod zwraca poprawne dane, bo jest to metoda uzywana przez kilka metod publicznych klasy FirstClass i to w niej zawarta jest istotna funkcjonalnosc logiczna. Pozostale metody wywolujace testedMethod w zasadzie jedynie przetwarzaja i dekoruja wynik zwrocony z testedMethod(). Problem w tym, ze musze zamokować metodę SecondClass::getValue, bo w warunkach testowych zupelnie odpada jej uzycie: odwoluje sie do zewnetrznych zasobow niedostepnych w srodowisku testowym, jest zlozona, zwraca nieprzewidywalne wyniki itd. - wiadomo o co chodzi (IMG:style_emoticons/default/smile.gif) Wszystko bylo by proste, gdyby metoda FirstClass::testedMethod() byla publiczna - ale jest prywatna i chce, zeby taka pozostala. Czy można w PHPUnit przetestować bezpośrednio testedMethod() dla różnych podanych parametrów z jednoczesnym mockiem na metodę SecondClass::getValue, która ma zwracać stałą wartość? Czy to jest w ogóle możliwe? Wiem jak: - testować metody prywatne/chronione (za pomocą refleksji) ale bez użycia mocka (w tym przypadku na SecondClass::getValue()) - jak testować publiczną metodę FirstClass::testedMethod() z mockowanym wywołaniem SecondClass::getValue(). Ale nie potrafię zrobić tego gdy testedMethod jest prywatna a muszę mieć zamockowane użycie SecondClass:getValue(). Da się? Jak? Ten post edytował irmidjusz 10.09.2012, 22:10:42 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 366 Pomógł: 261 Dołączył: 23.09.2008 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Testowanie prywatnych metod trochę mija się z celem, ponieważ tak na prawdę co powinieneś testować to interfejs jaki daje Tobie obiekt czyli metody publiczne, ale jeżeli na prawdę chcesz testować tę metodę prywatną to moim zdaniem najlepszy rozwiązaniem będzie stworzenie dodatkowej klasy (tylko na potrzeby testowania) która będzie rozszerzać FirstClass i dodać metodę publiczną która będzie metodą proxy dla testedMethod. Jest to trochę brudne rozwiązanie ale na tę chwilę nic innego nie przychodzi mi do głowy (IMG:style_emoticons/default/smile.gif)
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 14.10.2025 - 16:28 |