Spring注入PersistenceContext

时间:2013-09-24 17:38:14

标签: spring hibernate unit-testing aspectj

尝试使用AspectJ LTW实现具有面向方面的测试的DDD架构,这些测试访问数据库并检查用户是否存在...

目前我面临两个问题,我不知道这个类是否在Spring上下文中注入。我试图添加

//@RunWith(SpringJUnit4ClassRunner.class)
//@ContextConfiguration(locations = {"classpath*:EntityTest-context.xml"})

没有成功。这是我试图运行的测试。如果您注意到我在@Before上创建了EntityManager,我不知道这是否是正确的用法,因为当我尝试找到创建的对象时,我返回null。

package ienterprise.common.aspects;

import ienterprise.common.model.CompanyPosition;
import ienterprise.common.model.InternalUser;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.PersistenceContext;

import static org.junit.Assert.assertEquals;
import org.springframework.test.context.ContextConfiguration;

//@RunWith(SpringJUnit4ClassRunner.class)
//@ContextConfiguration(locations = {"classpath*:EntityTest-context.xml"})
public class EntityTest {

    private static final Logger logger = LoggerFactory.getLogger(EntityTest.class);

//    @PersistenceContext(unitName="mysql") // FIXME inject this in unit tests
    private static EntityManager manager;

    @Before
    public void setUp(){
        EntityManagerFactory mngFactory = Persistence.createEntityManagerFactory("mysql");
        manager = mngFactory.createEntityManager();
    }

    @Test
    public void createUser(){

        InternalUser someGuy = new InternalUser();

        someGuy.setName("Adam");
        someGuy.setUser("Engineer");

        someGuy.create();

        logger.debug("created user: {}", someGuy);
        //FIXME: Can't find the user in the database.
        InternalUser foundUser = manager.find(InternalUser.class, 1L);

        logger.debug("fetched user: {}",foundUser);


        assertEquals( someGuy, foundUser);
    }
}

我们的上下文xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <context:load-time-weaver/>

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" >
        <property name="persistenceXmlLocation" value="classpath*:META-INF/persistence.xml"></property>
    </bean>
</beans>

如何删除@Before并注入PersistenceContext?

如何确保我的班级有弹簧上下文?

这对我来说都是新的东西,如果有任何这种Spring + Hibernate + AspectJ + JUnit设置,我会很感激github存储库的一些链接。

如果有什么不清楚或者需要更多细节,请告诉我。

0 个答案:

没有答案