Выполнение тестов в отношении базы данных, где вы не можете предсказать, что в ней неэффективно; любой тест, достаточно устойчивый для изменения данных, будет бесполезным для подтверждения того, действительно ли проверенный код делает правильные вещи. Я бы сделал тест, используя свой собственный экземпляр базы данных, так что нет никаких сомнений в том, что другие пользователи могут отключить мой тест, или мой тест изменяет данные из-под кого-то другого. Идеальным выбором будет база данных в памяти, например, H2, что тест может создавать экземпляр и удалять, когда это делается с ним. Таким образом, тест может выполняться в любом месте (например, на сервере CI) с теми же результатами.
Тест должен запустить ddl для создания схемы и заполнения базы данных перед ее выполнением. Для этого вы можете использовать различные инструменты. DbUnit популярен, есть также альтернатива под названием DBSetup, которая должна быть менее сложной. Вы можете иметь отдельные тестовые данные для разных сценариев. У DbUnit есть инструменты для извлечения данных из базы данных, чтобы упростить создание тестовых данных.
Поскольку база данных находится под вашим контролем, и вы можете заполнить ее по своему усмотрению, вы должны убедиться, что поля возвращаемого объекта - это то, что вы ожидаете, на основе заполненных данных. Сделайте тест как можно более конкретным.
Для тестирования SQL и того, как объект сопоставляется с набором результатов, имеет смысл использовать базу данных. Для некоторых частей этого было бы целесообразно использовать единичный тест, который не касается базы данных и использует mocks. Например, было бы неплохо подтвердить, что соединение закрывается во всех случаях, проще использовать mocks, чем вызвать SQLException в коде.
Тестирование с использованием mocks было бы проще, если бы был введен класс DBConnection, а не был создан в методе. Если вы изменили код, чтобы ввести DBConnection, тогда вы можете написать единичный тест (один с использованием mocks, который не использует базу данных), который проверяет, закрывается ли соединение.
Вы хотите проверить инструкцию SQL? Можете ли вы опубликовать свой код под тестом? –
@bigdestroyer пожалуйста ... – eatmypants
Хорошо ... тестовая база данных является предметом споров. Мне это не нравится. Но есть инструменты для этого. Или вы можете использовать тестовую базу данных. –