spring-test环境搭建

1,我的目录结构

2,test/resource/spring-context.xml 与 src/resource/spring-context.xml  相同

    包括:扫描包、声明事务等

   

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
			  xmlns:aop="http://www.springframework.org/schema/aop" 
			  xmlns:context="http://www.springframework.org/schema/context"  
			  xmlns:p="http://www.springframework.org/schema/p" 
			  xmlns:tx="http://www.springframework.org/schema/tx"  
			  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
			  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  
			          http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd  
			          http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">  

     <context:component-scan base-package="com.xxx.entity" />  
    <context:component-scan base-package="com.xxx.dao" />  
    <context:component-scan base-package="com.xxx.service" />  
    
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">  
        <property name="configLocation">
            <value>classpath:resources/hibernate.cfg.xml</value>
        </property>
        <property name="packagesToScan">  
            <list>  
                <value>com.xxx.entity</value>
            </list>  
        </property>  
    </bean>  


    <!-- 将事务与Hibernate关联 -->
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory">
            <ref local="sessionFactory"/>
        </property>
    </bean>
     
<!--     事务(注解 ) -->
<!--     <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/> -->
    <tx:advice id="txAdvice" 
    	transaction-manager="transactionManager">
        <tx:attributes>
        	<tx:method name="*"/>
        </tx:attributes>
    </tx:advice>
    <aop:config>
    	<aop:pointcut expression="execution(* com.xxx.dao.impl.*Impl.*(..))"  id="myPointcut"/>
    	<aop:advisor advice-ref="txAdvice"
             pointcut-ref="myPointcut"/>
    </aop:config>
</beans>  

 注意:若session的建立(不知道改怎么说)在service层,且你只想测试dao层,请将上面标红的地方配置正确。test中的包结构要与src中的一致,若不一致请执行配置test下的spring-context.xml 。

否则会报:org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here

3,UserDaoTest.java

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations ={"classpath*:resource/spring-context.xml"})// 加载spring配置文件路径  
public class UserDaoTest {
	
	@Autowired
	private IUserDao userDao;
	
	@Test
	public void getUserById_Test(){
		System.out.println(userDao);
		User user = userDao.getUserById(1);
		System.out.println(user.getUserName());
	}
}

 加载的resource/spring-context.xml 是test下的。

@RunWith(SpringJUnit4ClassRunner.class) 一定要有。

4,spring-test方便我们对项目进行单元测试,而不必启动项目
 

猜你喜欢

转载自yk1129013140.iteye.com/blog/2213366