Sto scrivendo una semplice applicazione che leggerà alcuni record e li inserirà in un database. Ho scritto una stored procedure che gestisce la logica di inserimento e ho pianificato di testarla separatamente. Ora mi piacerebbe scrivere un buon test unitario per la parte della logica che prende un oggetto business e lo passa alla chiamata della procedura memorizzata.Come si deve testare l'unità Java che chiama una procedura memorizzata MySQL?
ho penso quello che voglio fare è passare un mock della connessione al database, quindi affermare che la chiamata viene effettuata con i valori dei parametri previsti:
Connection dbConnection = makeMockConnection(); // how?
MyObjectWriter writer = new MyObjectWriter(dbConnection);
writer.write(someSampleObject);
// somehow assert that dbConnection called
// `sp_saveMyObject` with param values x, y, and z
Tuttavia, sembra come un sacco di lavoro scavare all'interno di java.sql.Connection
, capire come funziona, quindi prendere in giro tutti i risultati. C'è una libreria di test che fa tutto questo per me? Sto arrivando a questo nel modo sbagliato?
Mocking della connessione per verificare se un metodo viene chiamato è davvero semplice. Dovresti avere familiarità con [Mockito] (http://code.google.com/p/mockito/) – Kai
Sto cercando di evitare di limitare la logica di business ad eseguire un determinato modo: potrei chiamare 'Connection.createStatement' oppure 'Connection.prepareStatement' o' Connection.prepareCall' o anche 'Connection.nativeSql', ognuno dei quali è * corretto * (in quanto i dati vengono passati alla procedura). Sto cercando di evitare di dover prendere in giro * tutte * di quelle cose, o almeno di dover scrivere quelle stesse canzonature. – Coderer