тестирование junit 4 с использованием Spring 3.0 и Hibernate 3 в Eclipse - LazyInitializationException - PullRequest
1 голос
/ 08 октября 2010

Я получаю LazyInitializationException, пытаясь проверить мои методы DAO, используя набор инструментов, определенный в заголовке.Насколько я понимаю, мой тест должен выполняться вне сеанса гибернации, или он был закрыт до того, как я попытаюсь прочитать дочерние объекты из моего DAO.Прочитав документацию, я понял, что использование тега @TransactionConfiguration позволит мне определить диспетчер транзакций, в котором будут выполняться тесты.

Я прочитал документацию несколько раз и миллион сообщений на форуме.Все еще хлопаю головой по клавиатуре ... Чего мне не хватает?Спасибо за вашу помощь!

мой класс тестового модуля:

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations = {
      "classpath:/WEB-INF/applicationContext-db.xml",
      "classpath:/WEB-INF/applicationContext-hibernate.xml",
      "classpath:/WEB-INF/applicationContext.xml" })
    @TestExecutionListeners({DependencyInjectionTestExecutionListener.class, CleanInsertTestExecutionListener.class})
    @DataSetLocation("test/java/com/yada/yada/dao/dbunit-general.xml")
    @TransactionConfiguration(transactionManager="transactionManager", defaultRollback = true)
    @Transactional
    public class RealmDAOJU4Test {

     @Autowired
     private DbUnitInitializer dbUnitInitializer;

     @Autowired
     private RealmDAO realmDAO;

     @Test
     public void testGetById() {
      Integer id = 2204;
      Realm realm = realmDAO.get(id);
      assertEquals(realm.getName().compareToIgnoreCase(
        "South Technical Realm"), 0);
      assertEquals(8, realm.getRealmRelationships().size());
     }
}

my applicationContext-hibernate.xml:

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="dataSource" ref="dataSource"></property>
  <property name="useTransactionAwareDataSource" value="true" />
   ... other properties removed ...
</bean>

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory">
   <ref bean="sessionFactory" />
  </property>
</bean>

определение моего дао в applicationContext.xml

<bean id="realmDAOTarget" class="com.yada.yada.dao.hibernate.RealmDAOImpl">
  <property name="sessionFactory" ref="sessionFactory" />
 </bean>
 <bean id="realmDAO" class="org.springframework.aop.framework.ProxyFactoryBean">
  <property name="proxyInterfaces">
   <value>com.yada.yada.dao.RealmDAO</value>
  </property>
  <property name="interceptorNames">
   <list>
    <value>hibernateInterceptor</value>
    <value>realmDAOTarget</value>
   </list>
  </property>
 </bean>

1 Ответ

2 голосов
/ 09 октября 2010

хорошо, для тех, кто следует дома, вот что я пропустил:

TransactionalTestExecutionListener

требуется, чтобы в списке @TestExecutionListeners аннотация @Transactional имела какой-либо эффект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...