Mam aplikacji Java, która używa wiele java.sql.Connection
do bazy danych.Niech deterministically DB do testowania
Chcę przetestować, że jeśli baza danych jest niedostępna, moje usługi zwracają odpowiednie kody błędów (rozróżniając tymczasowe i trwałe problemy, np. HTTP 500 i 503).
Do testowania moja aplikacja łączy się z osadzoną lokalną bazą danych h2 w pamięci; aplikacja nie jest tego świadoma, tylko mój test integracyjny jest.
W jaki sposób można dokonać deterministycznego zapisu w bazie danych, np. haczyk w commitach i zmuszanie ich do rzucania niestandardowego SQLException
? Chcę globalnej "bazy danych jest niedostępna" boolean w kodzie testowym, który wpływa na wszystkie połączenia i sprawia, że moja aplikacja wykonuje swoją logikę ponownego połączenia.
(zacząłem od buforowania Connection
i kładąc if(failFlag) throw new MySimulateFailureException()
w commit()
, ale to nie złapać PreparedStatement.executeUpdate()
; zanim rozpocząć buforowania na PreparedStatement
też - jego wiele sposobów - Chciałabym się nauczyć! lepszy sposób ...)
to może brzmieć głupio, ale dlaczego nie zatrzymać usługę bazy danych? lub zablokować port na zaporze sieciowej, aby nieco odmówić ruchu? – Serdalis
Zwykle przechodzę na trasę proxy, którą konspektujesz powyżej. Jeśli ktokolwiek ma lepsze podejście, byłbym zainteresowany jego wysłuchaniem. – Keppil