Тестирование модели данных с Hibernate - PullRequest
0 голосов
/ 05 июля 2011

В моем проекте у меня много файлов hbm.xml, из которых я генерирую классы java и sql для БД. Семантические ошибки в файлах hbm.xml показываются мне после вызова buildSessionFactory (), что действительно раздражает в текущей ситуации. Я хотел бы иметь тестовый класс, который делает это для меня с немного другим конфигом (используйте вместо этого ebedded derby). Мое текущее «решение» выглядит так:

    String dbName = "test";

    try{
        SessionFactory fact = new Configuration().configure()
                                                 .setProperty("hibernate.connection.driver_class","org.apache.derby.jdbc.EmbeddedDriver")
                                                 .setProperty("hibernate.connection.url","jdbc:derby:" + dbName + ";create=true")
                                                 .setProperty("hibernate.connection.username","")
                                                 .setProperty("hibernate.connection.password","")
                                                 .setProperty("hibernate.dialect","org.hibernate.dialect.DerbyDialect")
                                                 .setProperty("hibernate.hbm2ddl.auto","create-drop")
                                                 .buildSessionFactory();
        assertNotNull(fact);

        Session s = fact.openSession();
        assertNotNull(s);

        s.close();
        fact.close();
    }catch(Throwable t){
        fail(t.getMessage());
    }

Но это не очень удовлетворительно с моей точки зрения. Я также хотел бы проверить, все ли в порядке именованные запросы и так далее. Есть ли способ сделать такого рода тесты в автоматизированном процессе?

Вторая часть моего вопроса заключается в том, что если дерби - хороший выбор для тестирования, почему я не могу автоматически удалить БД после завершения теста? Я хотел бы указать параметр в URL, как

    "jdbc:derby:" + dbName + ";create=true;drop=true"

Используя это решение, я получаю каталог с именем dbName и файл derby в каталоге моего проекта, что не круто.

1 Ответ

0 голосов
/ 08 июля 2011

Если вы хотите протестировать свои именованные запросы, решение может состоять в том, чтобы вызывать их в тесте с поддельными аргументами (запросы, вероятно, ничего не будут возвращать, но, по крайней мере, вызовут их проверку в спящем режиме);что-то вроде:

 s.getNamedQuery("Whatever").setParameters(...).execute/query

Теперь ваша проблема в том, что вы не можете легко получить имена всех запросов?

Что касается базы данных derby, вы не можете просто "«вручную» избавиться от созданной папки в конце теста (например, в tearDown?)

Похоже, что место создания базы дерби можно контролировать с помощью свойства java:

http://db.apache.org/derby/manuals/develop/develop14.html

http://db.apache.org/derby/manuals/develop/develop12.html#HDRSII-DEVELOP-13018

...