Ho un'applicazione Java che utilizza molto java.sql.Connection
in un database.Errore DB in modo deterministico per il test
Voglio verificare che, se il database non è disponibile, i miei servizi restituiscono i codici di errore appropriati (distinguendo tra problemi temporanei e permanenti, ad esempio HTTP 500 e 503).
Per il test, la mia applicazione si collega a un database h2 incorporato, in memoria, locale; l'applicazione non ne è a conoscenza, solo il mio test di integrazione è.
Come posso fare in modo che le scritture sul database falliscano in modo deterministico, ad es. agganciarsi ai commit e farli lanciare un'abitudine SQLException
? Voglio un booleano globale "database non disponibile" nel codice di test che interessa tutte le connessioni e fa sì che la mia applicazione eserciti la sua logica di riconnessione.
(avevo iniziato con il proxy Connection
e mettendo un if(failFlag) throw new MySimulateFailureException()
in commit()
, ma questo non ha interferito PreparedStatement.executeUpdate()
; prima di imbarcarsi sul proxying il PreparedStatement
troppo - è un sacco di metodi - mi piacerebbe essere insegnato! un modo migliore ...)
questo può sembrare stupido, ma perché non interrompere il servizio di database? o bloccare la porta su un firewall per negare il traffico per un po '? – Serdalis
Di solito vado sul percorso del proxy che descrivi sopra. Se qualcuno ha un approccio migliore sarei interessato a sentirlo. – Keppil