Тестирование со встроенной базой данных H2 - импорт данных проходит нормально, при запуске теста он пытается снова инициировать данные, но не может найти таблицу - PullRequest
0 голосов
/ 25 сентября 2018

Я борюсь со встроенной базой данных H2, которую я хочу использовать для своих тестов.

Я вижу процесс в два этапа:

  • сборка моего проекта, во время которой схемабудут созданы и данные инициализированы. Кажется, это работает нормально, потому что я могу просматривать базу данных через консоль H2 - таблицы есть, и они содержат данные
  • , чтобы выполнить один из моих тестов. Это не удалось.Кажется, что когда тест выполняется, он пытается повторно выполнить мой сценарий инициализации данных, а затем терпит неудачу (ошибки в связи с нарушением первичного ключа).Кроме того, если я закомментирую часть в моем context.xml, где определены сценарии, и повторите тест - я получу Таблица xyz не найдена

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

1 Ответ

0 голосов
/ 26 сентября 2018

Чтобы ответить на мой собственный вопрос, если у кого-то возникнет такая же или похожая проблема.

  • ...
  • запустите один из моих тестов. Это не удалось.Кажется, что когда тест выполняется, он пытается повторно выполнить мой сценарий инициализации данных, а затем терпит неудачу (ошибки в связи с нарушением первичного ключа).Кроме того, если я закомментирую часть в моем context.xml, где определены сценарии, и повторите тест - я получаю Таблицу xyz не найдено

По сути, он попыталсяповторно выполнить сценарии.Решением было DROP table IF EXISTS каждой таблицы до CREATE ее использования.

Вторая и важная часть: table xyz not found ошибка.Проблема заключалась не в том, что таблицу не удалось найти - это было имя схемы, которая отсутствовала (фактически не была установлена) во время выполнения запроса.

Это то, что мне было нужно (обратите внимание на комментарий):

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource" />

    <property name="persistenceUnitName" value="tests" />
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property name="generateDdl" value="false" />
            <property name="showSql" value="true"/>
            <property name="database" value="H2" />
        </bean>
    </property>
    <!-- BELOW PROPERTY, namely the default_schema key -->
    <property name="jpaProperties">
        <props>
            <prop key="hibernate.hbm2ddl.auto">none</prop>
            <prop key="hibernate.default_schema">TESTINGDB</prop>
        </props>
    </property>
</bean>

Без этой части конфигурации моя тестовая схема не предполагалась, и таблицы были объявлены как не найденные.

...