È consigliabile cambiare i metodi privati in protetti per i test JUNIT?Modifica dei metodi privati protetti per i test
risposta
A volte è utile, sì.
Se la classe è estensibile, assicurarsi di rendere il metodo definitivo.
Inoltre, documentare il fatto che il metodo non deve essere chiamato da sottoclassi o classi esterne dello stesso pacchetto.
Io uso l'annotazione Guava @VisibleForTesting per chiarire che il metodo dovrebbe in effetti essere privato.
Grazie per avermi aperto gli occhi su @VisibleForTesting. Non sapevo che esistesse. Ritiene ancora che questo sia un po 'imperfetto in quanto influisce sulla sintassi dell'implementazione solo ai fini del test, ma è meglio che esporre membri e metodi che dovrebbero essere privati. E limitare i test ai metodi di interfaccia sembra una restrizione eccessivamente severa e talvolta poco pratica. – Lolo
È possibile invece impostare il pacchetto dei metodi locale.
È possibile chiamare il metodo privato utilizzando la riflessione oppure è possibile decidere che i metodi private
non debbano essere testati direttamente, solo indirettamente.
No in generale no. L'idea del test unitario è di testare ... le unità. O in altre parole implementazioni di metodi di interfaccia. Se vuoi testare un metodo che non puoi "vedere" questo potrebbe essere un odore di codice. Forse non hai separato abbastanza la tua logica di business dal codice dell'interfaccia utente o qualcosa del genere.
Quindi l'idea migliore sarebbe quella di ripensare la tua architettura. Ma se l'alternativa sarebbe quella di non testare il tuo codice, è una buona idea rendere questi metodi protetti.
Sebbene si preferisca il refactoring come suggerito da @ user714965, il MockPrivate di PowerMock può eseguire la simulazione senza aprire la visibilità dei propri metodi privati.
Scrivere i test prima di solito porta a un progetto in cui non è necessario prendere in giro metodi privati.
- 1. Protezione ingresso di metodi privati / protetti?
- 2. freccetta, unità di test metodi privati
- 3. C'è qualche differenza riguardo alle prestazioni dei metodi privati, protetti, pubblici e interni nelle classi C#?
- 4. Rendi privati i metodi delegati
- 5. metodi "protetti" in C#?
- 6. Rendi definitivi i metodi privati?
- 7. Sovrascrittura dei metodi privati in Java
- 8. Devo testare i metodi privati usando RSpec?
- 9. Metodi privati su metodi pubblici
- 10. Ignora metodi protetti
- 11. Copertura del codice quando non si testano metodi protetti/privati con PHPUnit
- 12. respond_to? e metodi protetti
- 13. Perché i metodi "privati" nell'oggetto orientato?
- 14. JVM e metodi privati
- 15. Classe di test Java con molti metodi privati
- 16. Swift - Unità test di variabili e metodi privati
- 17. metodi privati in Ruby
- 18. F # Metodi statici privati
- 19. Metodi e campi privati
- 20. Java impedisce di chiamare metodi privati o protetti all'esterno della classe
- 21. I metodi importati da Ruby sono sempre privati?
- 22. Classe nidificata in javascript, ereditarietà dei metodi privati
- 23. Perché non dovresti usare metodi statici per tutti i metodi privati?
- 24. Serializzare i dati dei membri privati
- 25. accesso ai metodi protetti in Ruby
- 26. scrittura nomi dei metodi lungo test per descrivere i test vs utilizzando in documentazione del codice
- 27. Test dei metodi che effettuano richieste http
- 28. In che modo i dati privati possono essere protetti con l'autenticazione OAuth2?
- 29. Qual è la procedura migliore per denominare metodi privati e statici privati in C#?
- 30. È possibile simulare proprietà e metodi protetti
Perché dovrebbe? Tu cambi qualcosa prima di testare, non posso vederne alcuna ragione? – Nanne
Quasi certamente non è una buona idea; se stai testando direttamente i metodi interni di una classe, dovresti prendere in considerazione il refactoring in una classe separata. –
L'ho fatto nei casi in cui un metodo privato restituisce alcune risorse che non sono disponibili nell'ambiente di testing dell'unità e voglio testare un altro metodo (non privato) che lo chiama. Rendendolo protetto, posso sovrascriverlo, in modo che restituisca alcuni stub/mock invece della risorsa non disponibile. Questo ha significato che un test unitario diventa quindi fattibile e non sono stato in grado di trovare un altro modo per aggirare questo, ma non è l'ideale. –