2012-02-11 2 views
1

Я использую HSQLDB для модуля JUnit, тестируя набор классов hibernate. В вызове каждого теста setUp() я инициализирую базу данных hsql в памяти (через спящий режим) с использованием имени тестового класса и тестового примера для создания строки подключения для экземпляра db в памяти. Но в моем втором тесте идентификационная последовательность, похоже, продолжается от первого теста. Я хочу, чтобы мои тесты были абсолютно независимыми, так что это меня удивляет. Я использую @GeneratedValue(strategy = GenerationType.AUTO) для своих идентификаторов. Моя целевая база разработки и производства - это mysql или postgresql, но это не имеет значения.HSQLDB, независимый для модульных испытаний

Обновление Я пробовал меньший тестовый чехол, и оказывается, что я был неправ. Я создал больше объектов в тесте secodn, в результате чего появился другой идентификатор. Мой плохой целиком!

+0

Это неожиданное поведение. Можете ли вы опубликовать код из 'setUp()', который вы используете для инициализации соединения с базой данных? – Perception

+0

Я попробовал меньший тестовый пример, и оказалось, что я ошибся. Я создал больше объектов в тесте secodn, в результате чего появился другой идентификатор. Мой плохой целиком! –

+0

Собственно, ваш второй тест не должен зависеть от фактического значения сгенерированного идентификатора. Тест не должен делать каких-либо неявных предположений о его среде. – yegor256

ответ

0

Возможно, база данных памяти HSQLDB будет удалена только после завершения приложения.

Вы можете совершить транзакцию перед каждым испытательным классом и откат ее после завершения тестового класса.

Смежные вопросы