![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 7.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Aktualnie zajmuje się testowaniem pewnej klasy i natknąłem się przy tym na pewien problem. A mianowicie jak przetestować metody "private" i "protected". Z metodami "protected" jest mniejszy problem gdyż jest możliwość utworzenia klasy pochodnej i upublicznienia interfejsu klasy bazowej do testów, czyli :
Nie ma wiec problemu. A co w przypadku gdy chcemy testować metodę "private". ![]() Pozdrawiam |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Dopisujesz publiczna metodę testową...
Ten post edytował wookieb 28.11.2008, 11:17:57 -------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
Metod chronionych i prywatnych nie testuje się bezpośrednio.
Musisz napisać taki test metod publicznych, który zapewni przetestowanie również metoch niepublicznych. Pokrycie kodu testami musi byc jak największe. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
Jak wyzej. Testujesz tylko metody publiczne, innych (tzn prywatnych i protected) "nie masz" - one sa wytworem refaktoryzacji, powstaly wydzielone z metod publicznych tak zeby kod byl czytelniejszy. Refaktoryzacja wymaga posiadania testow (tzn dobrze by bylo gdyby miec te testy - jest latwiej).
Zaczynasz testowac duza metode publiczna, wydaje ci sie za dluga, te linijki robia to samo co w drugiej metodzie obok - wydzielasz wspolny kod do metody prywatnej. Wydzielasz fragmenty kodu odpowiedzialne za jedna tematycznie rzecz do osobnej metody - prywatnej, itd. Tzn taka jest teoria, jesli zaczynasz od testow a potem metod publicznych to ci wszystko ladnie sie pouklada. i OOP to interfejsy a nie bebechy - a interfejsem sa TYLKO publiczne metody -------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 7.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
Dokładnie rozumiem ze OOP to interfejsy i ze klient widzi tylko publiczny interfejs. Chodziło mi po prostu o unikniecie pośredniego testowania i możliwość utworzenia w teście bezpośredniego testowania metod protected lub private (nie chce tutaj skłamać i konfabulować ale gdzieś mi się obiło o oczy takie możliwości np w Junicie czyli fremeworku testowym dla javy, ale tutaj mogę się głęboko mylić więc mnie skorygujcie).
Bardzo podoba mi się jednak koncepcja testowania pośredniego i tak skonstruowania metody testowej aby sprawdzała ona od razu metodę prywatną lub chronioną. Niekiedy jednak przydałaby by się możliwość za pomocą chociażby Reflection API sięgnięcia do metod chronionych i przetestowania jej bezpośrednio (bez zmian interfejsu klasy). Moje pytanie poniekad nasunelo mi sie tez w wyniku testpwania Reflection API, ktore umozliwia dostep do metod statycznych (private, protected, public) i zwrot z nich wartosci. Natomiast juz nie umozliwia dostepu do niestatycznych metod. Newiem dlaczego tak jest bo jeszcze tego nie odnalazlem w dokumentacji, ale z grubsza wydaja mi sie to troche niekonsekwentne Przyklad ponizej:
Pozdrawiam |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 25.06.2025 - 15:36 |