Sì, lo so, che metodi di prova privati non è una buona idea (e io letto questa discussione - http://www.ruby-forum.com/topic/197346 - e alcuni altri )Testing metodo privato in Ruby (RSpec)
Ma come posso testare il seguente codice?
Io uso xmpp4r. Nel mio metodo pubblico #listen
comincio ricevere jabber messaggi in questo modo:
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
- esegue blocco, quando il messaggio venuto (in thread differente)
Quindi, il test #listen
metodo è difficile e più test xmpp4r del mio #do_things_with_message
Come fare tutto bene e prova #do_things_with_message
? :) (http://www.ruby-forum.com/topic/197346#859664)
refactoring metodi privati a un nuovo oggetto essentialy sarebbe come io che li rende un pubblico (e di classe con un metodo - è insensatamente
EDIT: Questo è più una questione teorica sul codice pulito e il test corretti Nel mio primo link le persone sostengono che i metodi privati del test sono scarsi. Non voglio barare con #send
, ma anche io non vedo nessun vie percorribili di refactoring
Questa non è una vera domanda. Il thread a cui ti colleghi già offre diverse tecniche per realizzare ciò che desideri e alcuni buoni consigli su come modellare il tuo design attorno al problema. Puoi imbrogliare e usare 'send' o attivare il metodo nei tuoi test oppure puoi refactoring. – dbenhur
@dbenhur Non voglio imbrogliare, ma non vedo alcun metodo valido per refactor – Andrey
Se il codice è abbastanza complesso è necessario testare il metodo privato (cioè non è solo un semplice modello.trovare o qualsiasi altra cosa), quindi potrebbe essere abbastanza complesso da valere la pena di estrapolarlo in una classe separata, comunque. – Jason