Come testare la logica dell'unità nell'app crud

3

Mi scuso se questa domanda è già stata posta in precedenza, ho visto domande simili, ma non è affatto la stessa cosa.

Sto scrivendo un'applicazione web che utilizza le chiamate http per scrivere e leggere da un database back-end, oltre a eseguire operazioni sui dati.

Tutti i miei metodi pubblici sono sulla falsariga di:

writeToDatabase(data){
    performOperationsOnData(data)
    databaseHandler.connectToDatabase()
    databaseHandler.insertDataToDatabase(data)
}

Vorrei testare la mia logica del metodo performOperationsOnData (), ma questo è un metodo privato, perché non deve mai essere chiamato al di fuori della classe.

Ho scritto test di integrazione, che controllano che i dati siano scritti correttamente nel database in generale, ma quando la logica è ragionevolmente complicata non voglio davvero collegarmi al database o una simulazione per ogni possibile percorso attraverso la logica.

Quale sarebbe il modo corretto per testare questa logica? Sono particolarmente interessato a scoprire se la struttura del metodo che ho mostrato dovrebbe essere fatta in modo diverso per renderla più controllabile, oppure la risposta è solo un'iniezione di derisione e dipendenza per il database?

Domande simili:

Come posso utilizzare unit test e TDD per testare un'applicazione che si basa principalmente su operazioni CRUD del database?

link

    
posta Carasel 16.04.2015 - 12:29
fonte

1 risposta

3

Sembra che la logica in performOperationsOnData() possa essere giustificata nella propria classe.

Sembra che la classe con il metodo writeToDatabase(data) sia attualmente responsabile di troppo. Sta orchestrando la logica aziendale e la persistenza dei dati. Orchestrare va bene, purché questa sia l'unica responsabilità della classe.

Quindi, ecco come vorrei andare avanti:

  • Sposta la tua business logic da performOperationsOnData() a una nuova classe
  • Sposta la tua logica di persistenza dei dati ( connectToDatabase() e insertDataToDatabase(data) ) in una nuova classe
  • Inietti quelle nuove classi come dipendenze nella tua attuale classe Orchestrator
  • Unit test della classe Business Logic
  • Test di integrazione della classe Orchestrator
risposta data 16.04.2015 - 13:08
fonte

Leggi altre domande sui tag