我很热衷于在编译器和IDE的支持下通过移除XML文件来提升Spring3的开发效率,而这并不会改变Spring给你提供的强大的功能。
没有XML配置文件的Hibernate的单元测试是可行的,但是竟然花了我好一会才找到所有的东西,所以就在这里写下来。
我将在一个使用@Configuration注解的类中初始化所有的bean。
@Configuration @EnableTransactionManagement public class TestRepositoryConfig { @Bean public DataSource dataSource() { return new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.H2) .setName("Nuts").build(); } @Bean public LocalSessionFactoryBean sessionFactoryBean() { LocalSessionFactoryBean result = new LocalSessionFactoryBean(); result.setDataSource(dataSource()); result.setPackagesToScan(new String[] { "pl.squirrel.testnoxml.entity" }); Properties properties = new Properties(); properties.setProperty("hibernate.hbm2ddl.auto", "create-drop"); result.setHibernateProperties(properties); return result; } @Bean public SessionFactory sessionFactory() { return sessionFactoryBean().getObject(); } @Bean public HibernateTransactionManager transactionManager() { HibernateTransactionManager man = new HibernateTransactionManager(); man.setSessionFactory(sessionFactory()); return man; } @Bean public OrderRepository orderRepo() { return new OrderRepository(); } }测试类是这样的:
@RunWith(SpringJUnit4ClassRunner.class) @TransactionConfiguration(defaultRollback = true) @ContextConfiguration(classes = { TestRepositoryConfig.class }) @Transactional public class OrderRepositoryTest { @Autowired private OrderRepository repo; @Autowired private SessionFactory sessionFactory; @Test public void testPersistOrderWithItems() { Session s = sessionFactory.getCurrentSession(); Product chestnut = new Product("Chestnut", "2.50"); s.save(chestnut); Product hazelnut = new Product("Hazelnut", "5.59"); s.save(hazelnut); Order order = new Order(); order.addLine(chestnut, 20); order.addLine(hazelnut, 150); repo.saveOrder(order); s.flush(); Order persistent = (Order) s.createCriteria(Order.class).uniqueResult(); Assert.assertNotSame(0, persistent.getId()); Assert.assertEquals(new OrderLine(chestnut, 20), persistent .getOrderLines().get(0)); Assert.assertEquals(new OrderLine(hazelnut, 150), persistent .getOrderLines().get(1)); } }这里有几个需要注意的细节:
2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务