Mam następujące klasy (oczywiście to schemat z jedynie kluczowymi elementami kodu):
class FirstClass { private function testedMethod($param){ //ciezko pracujemy $value = $this->someMethod($param); //skladamy wynik na podstawie wartosci $value i zwracamy return $result; } public function someMethod($param){ //przygotowanie tablicy danych, wsrod ktorych znajduje sie wartosc pobrana z wywolania: $value = $this->getObject()->getValue(); //... dalej przetwarzanie i: return $data; } public function getObject(){ //tra la la cos tam i w koncu return new SecondClass(); } } class SecondClass { public function getValue(){ //call external service and return result return $result } }
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

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?