2015-03-24 4 views
0

У меня есть класс DAO, в котором мне нужно проверить метод, называемый getItemById(), который возвращаетItem объекта из таблицы децибел.Test с помощью JUnit DAO класса

До тех пор, как я понимаю, я должен сделать объект объект в этом тесте и проверить, соответствует ли он методу возврата? Или мне нужно просто проверить, возвращает ли он объект объект?

Что делать, если таблица пуста или нет строки с этим идентификатором?

Извините, это довольно новый вопрос, но я не могу прояснить ситуацию в своей голове. Пожалуйста помоги!

+0

Вы хотите проверить инструкцию SQL? Можете ли вы опубликовать свой код под тестом? –

+0

@bigdestroyer пожалуйста ... – eatmypants

+0

Хорошо ... тестовая база данных является предметом споров. Мне это не нравится. Но есть инструменты для этого. Или вы можете использовать тестовую базу данных. –

ответ

-2

Для выполнения модульного тестирования вы должны идти в три этапа:

  1. Подготовить тест environement (., Например, заполнить БД с известными тестовыми данными) - так что вы не будете спрашивать это таблица пуста или нет и т.д.
  2. Выполните проверку и утверждать результат
  3. ли ыборку - так тест не будет иметь влияние на других тестах

Кроме того, вы должны проверить все сценарии, катаясь sholuld обрабатывать все из них

+0

вы предоставили очень общую информацию, и я это уже знаю. Мои вопросы были ясны ... – eatmypants

+0

Я предполагаю, что вы не знаете, о чем говорите, - мой ответ был ясен. Представьте все сценарии «До тех пор, как я понимаю, мне нужно создать объект Item в этом тесте и проверить, соответствует ли он методу возврата? Или мне нужно просто проверить, возвращает ли он объект Item. То, что я написал, действительно очень распространено, но это то, о чем вы просили. Что делать, если таблица пуста или нет строки с этим идентификатором? '. Заполните базу известными тестовыми данными - проверьте, не возвращается ли null, если идентификатор верен. Dump db, поведение теста в случае «entityNotFound» – Antoniossss

+0

нормально, как я могу проверить, что мой метод вернул правильные данные из db? Я могу выполнить проверку, которая проверяет, что метод возвращает экземпляр Item, но я не могу проверить, соответствуют ли данные (но это цель теста: проверьте, не захватил ли метод правильные данные). – eatmypants

0

Выполнение тестов в отношении базы данных, где вы не можете предсказать, что в ней неэффективно; любой тест, достаточно устойчивый для изменения данных, будет бесполезным для подтверждения того, действительно ли проверенный код делает правильные вещи. Я бы сделал тест, используя свой собственный экземпляр базы данных, так что нет никаких сомнений в том, что другие пользователи могут отключить мой тест, или мой тест изменяет данные из-под кого-то другого. Идеальным выбором будет база данных в памяти, например, H2, что тест может создавать экземпляр и удалять, когда это делается с ним. Таким образом, тест может выполняться в любом месте (например, на сервере CI) с теми же результатами.

Тест должен запустить ddl для создания схемы и заполнения базы данных перед ее выполнением. Для этого вы можете использовать различные инструменты. DbUnit популярен, есть также альтернатива под названием DBSetup, которая должна быть менее сложной. Вы можете иметь отдельные тестовые данные для разных сценариев. У DbUnit есть инструменты для извлечения данных из базы данных, чтобы упростить создание тестовых данных.

Поскольку база данных находится под вашим контролем, и вы можете заполнить ее по своему усмотрению, вы должны убедиться, что поля возвращаемого объекта - это то, что вы ожидаете, на основе заполненных данных. Сделайте тест как можно более конкретным.

Для тестирования SQL и того, как объект сопоставляется с набором результатов, имеет смысл использовать базу данных. Для некоторых частей этого было бы целесообразно использовать единичный тест, который не касается базы данных и использует mocks. Например, было бы неплохо подтвердить, что соединение закрывается во всех случаях, проще использовать mocks, чем вызвать SQLException в коде.

Тестирование с использованием mocks было бы проще, если бы был введен класс DBConnection, а не был создан в методе. Если вы изменили код, чтобы ввести DBConnection, тогда вы можете написать единичный тест (один с использованием mocks, который не использует базу данных), который проверяет, закрывается ли соединение.