2013-06-12 2 views
1

Я использовал Hibernate вместе с Spring в JUnit для интеграции. Я использую множественные чтения и записи для проверки своих кодов, если они правильно обрабатывают параллелизм. Дело в Hibernate заключается в том, что я не могу использовать только несколько потоков для имитации этого. Hibernate жаловался, что нет активной сессии Hibernate, связанной с DAO. Итак, что я сделал, чтобы получить эту работу, было выполнение методов DAO в файле TransactionTemplate Hibernate в потоке, например.Hibernate + JUnit Многопоточный интегрированный тест

Thread alpha = new Thread(new Runnable() { 
      @Override 
      public void run() { 
       TransactionTemplate tt = new TransactionTemplate(tm); 
       tt.execute(new TransactionCallbackWithoutResult() { 
        @Override 
        public void doInTransactionWithoutResult(TransactionStatus status) { 
         Address address =addrDao.findBy("John Doe"); 
         address.setZipCode("12345"); 
         addrDao.update(address); 
        } 
       }); 

      } 
     }); 

Создать новую тему, бета-версию, с тем же контентом с дополнительной задержкой по времени. Наконец, запустите оба потока,

alpha.start(); 
    beta.start(); 

Это сработало. Мой вопрос: есть ли лучший способ сделать это, кроме использования TransactionTemplate (...) в настройке Spring + Hibernate + Junit?

Кроме того, я обнаружил, что действие не может быть откат в конце этого теста, хотя я включил @TransactionConfiguration(defaultRollback = true) в начале этого теста.

Благодаря

+0

Привет, вам удалось найти решение этого? – FourtyTwo

ответ

0

trueAdd следующее протестировать класс:

@RunWith(SpringJUnit4ClassRunner.class) 
@Transactional 
@ContextConfiguration("classpath:application-context.xml") 
@TransactionConfiguration(defaultRollback=true) 

и следующая строка в прикладном-context.xml

<tx:annotation-driven/> 

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

+0

Да, я добавил все это в свой тестовый класс. Они работают только в том случае, если ваш тест является одиночным. – thlim

+0

defaultRollback = true по умолчанию. Аннотации '@ TransactionConfiguration' достаточно – shevchyk

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