2013-07-22 42 views
0

我使用Spring 3.1.1.RELEASE,JUnit 4.8.1和Hibernate 4.1.0.Final。我有这个在我的测试应用程序上下文定义:如何从JUnit测试中的EntityManagerFactory获取属性?

<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> 

我如何获得“packagesToScan”特性,以我的JUnit测试一个字符串?我试过

@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”。

回答

0

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

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

我想你可以定义一个默认的Spring属性,然后查询该属性。

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

这里是如何得到它

@Value("${packagesToScan}") 
private String packagesToScan; 
相关问题