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方便我们对项目进行单元测试,而不必启动项目