Tak, wiem, że testowanie metod prywatnych nie jest to dobry pomysł (i czytam ten wątek - http://www.ruby-forum.com/topic/197346 - i kilka innych)Testowanie prywatnych metoda w Ruby (rspec)
ale jak mogę przetestować poniższy kod?
Używam xmpp4r. W moim metoda publicznego #listen
zacznę otrzymywać jabber wiadomości tak:
def listen
@client.add_message_callback do |m|
do_things_with_message(m)
end
end
private
def do_things_with_message(m)
#
end
#add_message_callback
- uruchamia blok, gdy wiadomość pochodzą (w innym wątku)
Więc testowania #listen
metody jest to trudne i dalsze testy xmpp4r niż mój #do_things_with_message
Jak zrobić wszystko prawo i próbę #do_things_with_message
? :) (http://www.ruby-forum.com/topic/197346#859664)
byłaby prywatne metody do nowego obiektu essentialy byłoby jak czyni je publiczną (i klasę z jednej metody - to bezsensownie
EDIT: To jest bardziej teoretyczne pytanie o czystą kod i poprawne testy. W moim pierwszym linku ludzie twierdzą, że testują metody prywatne słabo. Nie chcę oszukiwać z #send
, ale też nie widzę żadnych realne sposoby byłaby
To nie jest prawdziwe pytanie. Wątek, do którego odnośnik już posiadasz, daje ci kilka technik do osiągnięcia tego, co chcesz, i kilka dobrych rad, jak kształtować swój projekt wokół problemu. Możesz oszukiwać i używać 'send' lub włączać publiczną metodę w swoich testach, lub możesz refaktoryzować. – dbenhur
@dbenhur Nie chcę oszukiwać, ale także nie widzę żadnych opłacalnych sposobów na refaktoryzację – Andrey
Jeśli twój kod jest wystarczająco złożony, musisz przetestować metodę prywatną (to znaczy, nie jest to tylko prosty model.znaleźć lub cokolwiek innego), to może i tak być na tyle skomplikowanym, że warto go wydobyć na osobną klasę. – Jason