Piszę prostą aplikację, która odczyta niektóre rekordy i wstawi je do bazy danych. Napisałem procedurę przechowywaną, która obsługuje logikę wstawiania i planuję ją przetestować osobno. Teraz chciałbym napisać dobry test jednostkowy dla części logiki, która pobiera obiekt biznesowy i przekazuje go do wywołania procedury przechowywanej.W jaki sposób powinienem przetestować Java, która wywołuje procedurę przechowywaną MySQL?
myślę co chcę zrobić, to przekazać próbną połączenia z bazą danych, a następnie stwierdzić, że połączenie jest wykonane z oczekiwanymi wartościami parametrów:
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
Jednak wydaje się, że dużo pracy kopać wewnątrz java.sql.Connection
, zrozumieć, jak to działa, a następnie kpić z wszystkich wyników. Czy istnieje biblioteka testowa, która robi to wszystko dla mnie? Czy podejdę do tego w niewłaściwy sposób?
Prześmiewanie połączenia w celu sprawdzenia, czy wywoływana jest metoda, jest naprawdę łatwe. Powinieneś zapoznać się z [Mockito] (http://code.google.com/p/mockito/) – Kai
Próbuję uniknąć ograniczenia logiki biznesowej do uruchomienia w określony sposób - mogę nazwać "Connection.createStatement" lub 'Connection.prepareStatement' lub' Connection.prepareCall' lub nawet 'Connection.nativeSql', z których każdy jest * poprawny * (w tym przypadku dane zostają przekazane do procedury). Próbuję uniknąć wyszydzania * wszystkich * tych rzeczy, albo przynajmniej samemu pisać te drwiny. – Coderer