2011-09-14 78 views
0

我使用的是Spring 3.1.0.M2。我正在编写一些JUnit 4测试来测试一些数据库功能,但是我无法连接我的数据源。在我的JUnit类中,我有...春季:在Junit测试中布置数据源的问题

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(loader=AnnotationConfigContextLoader.class, 
    classes={DataSource.class, WebLeadsDAOImpl.class}) 
public class TestDB { 
... 
@Qualifier("mycoSessionFactory") 
private SessionFactory sessionFactory; 

/** 
* Using a single lead lookup should speed up our testing queries. 
* <p> 
* The lead is is 8104051 
* </p> 
*/ 
@Before 
public void prep() { 
    assertNotNull(sessionFactory); 
    ... 
} 

但“sessionFactory”对象重复为空。这里是我正在尝试对其进行配置......

@Lazy 
@Component 
@PropertySource("classpath:oracle.properties") 
public class DataSource { 
… 

@Bean(name="mycoSessionFactory") 
public SessionFactory sessionFactory() throws Exception { 
    final SessionFactory sessionFactory = new AnnotationSessionFactoryBuilder() 
     .setDataSource(dataSource()) 
     .setHibernateProperties(databaseProperties()) 
     .setPackagesToScan("com.criticalmass.systems.leadsmonitor.domain") 
     .setSchemaUpdate(false) 
     .buildSessionFactory(); 
    return sessionFactory; 
} 

的原因,我不只是用“@Autowired”,是因为我有两个SessionFactory的豆类。任何想法为什么我的数据源连接不正确?谢谢, - 戴夫

回答

0

感谢您的更新的建议,但得到的答复可谓是我忘记了成员字段前添加

@Autowired 

。当我这样做时,一切都很好。 -

0

看起来像你错过了@ContextConfiguration注释你的测试类。


我想我有它︰你错过了注释,触发Spring注入的东西。 只需添加:

  • @Inject
  • @Resource
  • @Autowired

一个SessionFactory的变量声明在你的测试用例。

+0

我编辑了我的回复,表明我的JUnit类已经有了指向相应类的“@ContextConfiguration”注解。实际上,我通过日志记录验证了上面列出的SessionFactory bean生成方法正在被调用。任何其他想法? – Dave

+0

@Dave:看到我改变的答案 – Ralph