2013-06-29 5 views
0

Я использую HSQLDB для модульного тестирования, у меня есть группа тестов, которая расширяет один абстрактный класс MyAbstractTestBase.JUnit 4 - создайте таблицы HSQLDB программно перед запуском модульных тестов

class abstract MyAbstractTestBase 
{ 
    static 
    { 
     setUpDBTables(); 
    } 

    public static void setUpDBTables() 
    { 
     context = new ClassPathXmlApplicationContext(new String[]{ 
      "file:spring-configuration/unit-testing-config.xml" 
     }); 
     //InputStream inputStream = getClass().getClassLoader().getResourceAsStream("db/MY_TABLE.sql"); 
     DataSource dataSource = (DataSource)context.getBean("MyDataSource"); 

     namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource); 

    } 
} 

Основная проблема такого подхода EntityManager создан весной,

@PersistenceContext(unitName = MyConstants.ENTITY_MANAGER_FACTORY_UNIT_NAME) 
protected EntityManager entityManager; 

не сохраняются данные и исключение не выбрасывается либо, но если я пытаюсь прочитать некоторые данные с помощью «выбрать» его работает.

Вот мой вопрос: Как создать таблицы перед началом модульных тестов? Так что мой entityManager будет работать так, как ожидалось.

Кроме того, почему мой entityManager не сохранял никаких записей, даже если он не сделал никаких исключений.

+0

Я запутался - если вам нужно создать таблицы для того, чтобы вам код для запуска, как ваши ЗЕЬЕСТЫ рабочих ? – DaveH

+0

1. Я могу создавать таблицы. 2. Я могу вставлять данные, используя NamedParameterJdbcTemplate, инициализированный в абстрактном классе. 3. Я не могу вставлять/сохранять данные с помощью entitymanager. 4. Я могу проверить «выбрать» с помощью entityManager, установив точку останова и вставить запись вручную или используя NamedParameterJdbcTemplate –

ответ

1

Если вы используете тест пружины, я настоятельно рекомендую использовать подход из этого ответа: How to load DBUnit test data once per case with Spring Test

+0

Спасибо, ваш ответ в другом сообщении - именно то, что я искал. Тем не менее, у меня есть один вопрос. Когда я вставляю запись с помощью entityManager, я не могу запросить эти записи из проводника HSQLDB, тогда как использование entityManager.createNativeQuery («select * ...») возвращает результат, как это возможно? –