Есть целый набор ответов на это. Первое, что нужно сделать, это четко сформулировать, что вы тестируете. Является ли это фасадом API, за которым стоит база данных, объекты DAO, структура вашей базы данных?
Достижение этого также поможет вам выбрать лучший способ проверки. Из того, что я вижу, есть альтернатива тем, которые вы перечислили. То есть запустить в базе данных памяти, такой как hsql, и запустить свои классы и тесты против этого. Это означает, что вы можете создать структуру базы данных в начале ваших тестов. Поскольку он находится в памяти, вам не нужно беспокоиться о наличии сервера базы данных, это быстро, и вы можете загрузить его с данными, относящимися к вашему тесту.
Я часто использую mocks, и хотя они отлично подходят для модульного тестирования класса, в некоторых случаях это не так. Они также могут легко пропустить свинец. Нередко что-то, что работает с макетами, не работает при интеграции. Причина этого заключается в том, что вы загружаете макет определенными ожиданиями и ответами, которые вы, возможно, ошибочно истолковали из того, что представляет макет.
Не поймите меня неправильно, я люблю издеваться и использовать их совсем немного. Но при этом вы никогда не должны предполагать, что поскольку что-то тестируется модулем, это правильно. Это увеличивает шансы, но интеграционные тесты дают вам 100% уверенность.