如何在JUnit测试中从EntityManagerFactory获取属性?

时间:2013-07-22 15:39:23

标签: spring hibernate properties junit entitymanager

我正在使用Spring 3.1.1.RELEASE,JUnit 4.8.1和Hibernate 4.1.0.Final。我在测试应用程序上下文中定义了这个:

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="packagesToScan" value="org.myco.subco,com.parentco.fdr.myproject" />
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
    </property> 
    <property name="dataSource" ref="dataSource"/>
    <property name="jpaPropertyMap" ref="jpaPropertyMap" />
</bean>

如何在我的JUnit测试中将“packagesToScan”属性作为字符串获取?我试过了

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({ "classpath:test-context.xml" })
public class SerializableTest extends AbstractNTsubcoTests
{

        @Autowired
        private EntityManagerFactory m_entityManagerFactory;

    @Test
    public final void testSerializable()
    {
        final String packagesToScan = (String) m_entityManagerFactory.getProperties().get("packagesToScan");
        System.out.println("packagesToScan:" + packagesToScan);
    }   // testSerializable
}

然而,上面打印出“null”,尽管事实上我在上下文中定义了一个非null值。

1 个答案:

答案 0 :(得分:0)

该属性设置为org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean,而不是EntityManagerFactory。 LocalContainerEntityManagerFactoryBean不是EntityManagerFactory,它创建EntityManagerFactory。

查看Spring代码后,将在DefaultPersistenceUnitManager中设置packagesToScan属性,但无法获取其值。

我认为您可以使用默认值定义Spring属性,而不是查询该属性。

<property name="packagesToScan" value="${packagesToScan:org.myco.subco,com.parentco.fdr.myproject}" />

以下是如何获得它

@Value("${packagesToScan}")
private String packagesToScan;