Normalmente, il controller collega insieme diversi oggetti e li collega nell'ordine corretto. Forse chiama un repository, legge alcuni oggetti e li restituisce attraverso il metodo render. Forse chiama altri Handler/Manager che fanno cose.
Ciò significa che un controller è un componente di alto livello. Molto spesso questo indica che i test funzionali sono in ordine invece dei test unitari. Non dovresti mirare a ottenere una copertura del codice del 100% con i tuoi test unitari. Forse puoi pensarci in questo modo: se collaudi unitamente tutto ciò che il controller chiama (modello, validazione, modulo, repository), cosa potrebbe andare storto? La maggior parte delle volte è qualcosa che si osserva solo quando si utilizzano tutte le classi reali coinvolte durante la produzione.
Vorrei anche sottolineare che TDD non significa che tutto deve essere testato unitamente. Va bene avere alcuni test funzionali per il codice di alto livello. Come detto, se provi i componenti di basso livello con i test unitari, dovresti solo verificare come stanno lavorando insieme, cosa che non puoi testare con i mock perché dici al mock quale sia il valore di ritorno.
Se il controller fa più che collegare parti del sistema, dovresti pensare a rifare il materiale in più classi di basso livello che puoi testare con i test unitari.
Quindi il mio suggerimento sarebbe quello di utilizzare i test funzionali per testare i controller e le unità di test utilizzare per provare il modello e la vostra roba logica di business.
Se si lotta con test funzionali, si può leggere quanto segue:
Qual è esattamente il problema con esso la restituzione di un oggetto 'Response'? –
Niente. Non mi piace il fatto che un oggetto Response sia stato creato in un controller. Sono un convinto sostenitore della dipendenza da iniezione, e odio vedere la parola chiave "nuova" in qualcosa di diverso da un contenitore DI. Forse quella credenza è sbagliata. –