2013-06-19 35 views
5

Zastanawiam się, jaki jest najlepszy sposób testowania metod związanych z JDBC? Takich jak dodawanie użytkowników, usuwaniem użytkowników, itpTestowanie zapytań JDBC w JUnit

(przy użyciu JUnit)

powinienem ustawić wszystkie moje void metod logicznych i mieć je zwróci true jeśli już pracował, false jeśli nie zrobili, i potwierdzić te wartości w moich testach JUnit?

To tylko ogólne pytanie, aby znaleźć najlepsze praktyki.

Dziękujemy!

+0

Ogólnie zalecam, że jest to prowincja testu integracyjnego. Użyj bazy danych w pamięci, takiej jak H2 w miejsce zwykłej bazy danych i zapewnij, że po wywołaniu metod DAO tabele zawierają oczekiwane wiersze. –

Odpowiedz

7

Osobiście znajduję niesamowite narzędzie do tego jest Mockito. Możesz wysmakować, co dałby ci zwrot z JDBC, abyś mógł powiedzieć, że podając określone zapytanie i parametr, otrzymasz określoną wartość.

Nie powinieneś modyfikować swojego kodu, aby działał z testami jednostkowymi, powinien działać zarówno w produkcji, jak iw teście dokładnie w ten sam sposób.

Można również rozważyć użycie bazy danych w pamięci, takiej jak Derby, i wczytanie wartości na początku fazy testowej, aby poznać wartości w nim istniejące. Kpiny prawdopodobnie byłyby szybsze, jeśli chodzi o czas wykonania.

+0

Dobra, wypróbuję Mockito dzięki! – user2297666

+0

Jeśli to zrobisz, NIE będziesz sprawdzać kodu bazy danych - będziesz testował wszystkie te rzeczy, które zależą od twojego kodu bazy danych, ale nie sam kod DB.Czy to właśnie chcesz robić? – DaveH

1

Uzyskiwanie dostępu do bazy danych w teście jednostkowym zazwyczaj nie jest dobrym pomysłem. Myślę, że lepiej byłoby sfałszować połączenie z bazą danych i sprawdzić, czy wywoływane są poprawne zapytania. Przyczyna, która nie uwzględnia przypadku, w którym baza danych została zmieniona, a zapytania nie działają, ale zwykle dzieje się to bardzo rzadko.

1

Myślę, że bardzo proste metody CRUD nie wymagają testowania za pomocą testu jednostkowego. Po prostu uruchom metodę, a następnie sprawdź tabelę. Najbardziej złożonym testem będą objęte podstawowe operacje CRUD.

Jednak już przeczytałem kod, w którym operacja Create/Find jest testowana zarówno w jednej z metod, takich jak test integracji. Wynik wyszukiwania jest następnie porównywany z żądaniem utworzenia.

EDIT: Można również spojrzeć na DB Unit

2

Kiedy piszę testy jak to załączyć do aktualnej bazy danych, które będę uruchomiony przed (zamiast bazy danych w pamięci). Znaczna część mojego kodu używa procedur przechowywanych lub innych funkcji specyficznych dla bazy danych, które niekoniecznie są obsługiwane przez Derby, itp.

Bez względu na to, czy są to testy jednostkowe, czy integracyjne, nie wiem. Ale są one ważne, więc wolę je wbudować w cykl ciągłej integracji.

Jeśli korzystasz z trwałej bazy danych, musisz się martwić o kilka dodatkowych rzeczy. Musisz znać stan danych przed uruchomieniem testów, a powinieneś zrobić wszystko, co możesz, aby przywrócić go do znanego stanu, ponieważ każdy test jest uruchamiany. Jeśli tego nie zrobisz, twoje testy nie będą się od siebie niezależne i zaczniesz szukać testów później w pakiecie zaczynają się zawieść z powodu awarii we wcześniejszych testach.