Attualmente sto impostando le basi per un'applicazione ASP.Net MVC e sto esaminando il tipo di test unitari che dovrei essere pronto a scrivere. Ho visto in più luoghi persone che dicevano essenzialmente "non preoccuparti di testare le tue opinioni, non c'è logica ed è banale e sarà coperto da un test di integrazione".
Non capisco come sia diventata la saggezza accettata. I test di integrazione hanno uno scopo completamente diverso rispetto ai test unitari. Se rompo qualcosa, non voglio sapere una mezz'ora dopo, quando i miei test di integrazione si interrompono, voglio sapere immediatamente.
Scenario di esempio: Diciamo che abbiamo a che fare con un'app CRUD standard con un'entità cliente. Il cliente ha un nome e un indirizzo. Ad ogni livello di test, voglio verificare che la logica di recupero del cliente riceva correttamente sia il nome che l'indirizzo.
Per testare unitamente il repository, scrivo un test di integrazione per colpire il database. Per testare unitamente le regole aziendali, eseguo il mock out del repository, fornisco i dati appropriati delle regole aziendali e verifica che i risultati attesi vengano restituiti.
Cosa mi piacerebbe fare: Per testare l'interfaccia utente, ho preso in giro le regole aziendali, ho impostato la mia istanza cliente prevista, reso la vista e verificato che la vista contenga i valori appropriati per l'istanza che ho specificato.
Cosa sono bloccato a fare: Per testare unitamente il repository, scrivo un test di integrazione, configuro un login appropriato, creo i dati richiesti nel database, apro un browser, navighi verso il cliente e verifichi che la pagina risultante contenga i valori appropriati per l'istanza che ho specificato.
Mi rendo conto che esiste una sovrapposizione tra i due scenari discussi sopra, ma la differenza fondamentale è il tempo e lo sforzo necessari per impostare ed eseguire i test.
Se I (o un altro dev) rimuove il campo dell'indirizzo dalla vista, non voglio aspettare che il test di integrazione lo scopra. Voglio che venga scoperto e segnalato in un test unitario che viene eseguito più volte al giorno.
Ho la sensazione di non cogliere un concetto chiave. Qualcuno può spiegare perché volere un feedback di prova immediato sulla validità di una visualizzazione MVC è una cosa negativa? (o se non male, quindi non il modo previsto per ottenere detto feedback)