#java #junit
#java #junit
Вопрос:
У меня есть код, который извлекает немного информации из базы данных. Например, если вы передадите идентификатор пользователя, метод вернет вам сведения о человеке, такие как:
Имя: XXX X XXX
Адрес: XXXXXXXXXXXXX XXXXX
Телефон: XXXXXX
В Junit какова хорошая практика для тестирования этого типа кода? Является ли хорошей практикой, чтобы Junit подключался к БД?
Является ли хорошей практикой, что JUnit будет подключаться к БД и извлекать информацию для одного и того же идентификатора пользователя и выполнять утверждение.
Спасибо.
Ответ №1:
Для тестирования кода, который действительно должен работать с базой данных, вам следует обратиться к dbunit . Однако о базе данных должно быть известно как можно меньше кода, что позволяет вам подделывать части «извлечения или обновления данных» при тестировании других компонентов.
Я бы настоятельно рекомендовал смесь тестов БД — множество модульных тестов, которые попадают в базу данных в памяти (например, HSQLDB), и «достаточные» интеграционные тесты, которые касаются реального типа базы данных, которая будет использоваться в производстве. Возможно, вы захотите убедиться, что все ваши тесты действительно могут выполняться в обеих средах — обычно они разрабатываются с использованием HSQLDB, но затем выполняются с вашей производственной базой данных (которая обычно медленнее настраивается / демонтируется) перед регистрацией и в вашей непрерывной сборке.
Ответ №2:
Похоже, вы говорите о чем-то вроде объекта доступа к данным. Я бы сказал, что важно протестировать такие вещи с реальной базой данных. Посмотрите на H2 для быстрой базы данных в памяти, которая отлично подходит для тестирования. Создайте свой заполненный объект, используйте свой код сохранения, чтобы сохранить его в базе данных, а затем загрузить обратно. Затем убедитесь, что возвращаемый вами объект имеет то же состояние, что и то, что вы сохранили в первую очередь.
Рассмотрите возможность использования Spring test framework для помощи в управлении транзакциями в тестах на постоянство и для общей поддержки тестирования, если вы используете Spring в другом месте.