Quando scrivo (unit) i test cerco sempre di evitare ad esempio i falsi di microsoft perché poi la funzione di modifica e continua non funziona più. Tuttavia questo spesso richiede il refactoring ... e talvolta metodi o proprietà che esistono solo per supportare i test (unit). Un esempio:
Con i falsi che potrei fare in ogni metodo di prova semplicemente questo:
ShimMyClass.InitializedGet = () => false;
ma senza falsi ho bisogno di scrivere un internal
metodo ResetInitialized()
visibile solo all'assembly test (unit).
Come:
- Preferiresti rendere le cose private interne / pubbliche per i test, o usare qualche tipo di hack come PrivateObject?
- È un cattive abitudini per modificare il codice rigorosamente a scopo di test
Non renderò pubblici i metodi privati per supportare i test delle unità, ma li scriverò solo per i test delle unità. Tali metodi non avrebbero altri compiti ma essere chiamati in un test unitario. ResetInitialized
non verrebbe mai chiamato durante un normale flusso di lavoro ma solo da un test unitario.
In altre parole: se non avessi creato il test unitario non avrei mai dovuto scrivere questo metodo / proprietà di supporto aggiuntivo. Non sarà mai chiamato da nessun'altra cosa che un test unitario.
Esempio
Ho una classe che inizializzo quando l'applicazione si avvia e le successive inizializzazioni sono saltate. L'inizializzazione avviene internamente quando viene utilizzata la prima funzione . In questo caso non sono in grado di testare più di un test case alla volta. Devo essere in grado di resettarlo per far funzionare automaticamente i test.
Sarebbe male renderlo in realtà anche ripristinabile ma l'unico utente di questa funzione sarebbe il test unitario?