Spring Junit4 Test

捣鼓了差不多一天。。。终于把"No Session found for current thread"问题解决了

环境:Spring 4.0.6 RELEASE + Hibernate 4.2.2 Final

折腾记录如下:

1. 出现"No Session found for current thread",查找配置文件中的sessionFactory配置,确认无误;

2. 检查写的测试用例,并尝试修改注解:@Transactional和@TransactionConfiguration,没解决;

3. 再检查DAO层代码和对应的entity,确认没问题;

4. 搜索"No Session found for current thread",有人说是配置文件中需要加上<prop key="hibernate.current_session_context_class">thread</prop>

  试了,结果没有了"No Session found for current thread",但是出现了"HibernateException: contains is not valid without active transaction",表明没有事务,错误更大了。

5. 接着搜索,找到如下blogs:

http://www.iteye.com/topic/1126047

根据以上博客内容,加上Service层代码,并测试通过,郁闷了。。。

http://blog.csdn.net/funi16/article/details/8691575

在看到这个博客后,噢了一声,果断把extends AbstractJUnit4SpringContextTests换成extends AbstractTransactionalJUnit4SpringContextTests,这才把事务管理加进来了,也可以回滚了!

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext_persistence.xml")
@TransactionConfiguration(transactionManager = "transactionManager",defaultRollback = true)
public class ActionDAOImplTest extends AbstractTransactionalJUnit4SpringContextTests {

    @Autowired
    private ActionService actionServiceImpl;

    @Autowired
    private ActionDAO actionDAOImpl;

    @Test
    //@Rollback
    public void testAdd() throws Exception {
        Action action = new Action();
        action.setLoginDate(new Date());
        Thread.sleep(2000);
        action.setLogoffDate(new Date());
        action.setUserName("chris");
        action.setOperation("add;update;select");
        actionServiceImpl.recordAction(action);
        Action lookUpOne = actionServiceImpl.checkAction(4);
        Assert.assertEquals("right","add;update;select",lookUpOne.getOperation());
    }

    @Test
    @Rollback(value = false)
    public void testAdd2() throws Exception {
        Action action = new Action();
        action.setLoginDate(new Date());
        Thread.sleep(2000);
        action.setLogoffDate(new Date());
        action.setUserName("chris");
        action.setOperation("add;update;select");
        actionDAOImpl.save(action);
        Action lookUpOne = actionDAOImpl.find(8);
        Assert.assertEquals("right","add;update;select",lookUpOne.getOperation());
    }
}
时间: 2024-10-07 16:10:59

Spring Junit4 Test的相关文章

spring junit4 测试

@Service @ContextConfiguration(locations = { "classpath:config/applicationContext.xml" }) @RunWith(SpringJUnit4ClassRunner.class) @TransactionConfiguration(transactionManager="transactionManager", defaultRollback=false) public class Un

easymock+junit+spring学习&#183;

Easymock学习                                Author:luojie 1.       Easymock简介 EasyMock 是一套通过简单的方法对于指定的接口或类生成 Mock 对象的类库,它能利用对接口或类的模拟来辅助单元测试. 用于白盒测试,与预期结果不同,才去分析代码. 2.       Easymock + junit 单元测试 EasyMock采用"记录-----回放"的工作模式,基本使用步骤: *         创建Mock对

maven spring3.2.5

出现的情形: 开发环境: spring3.2.5 + springmvc +spirngDATA +maven 一. 偶然的spring Junit4测试 加载applicationContext.xml提示parse Xml....error 原因 java.lang.NoClassDefFoundError:  org.springframework.core.type.StandardAnnotationMetadata java.lang.ClassNotFoundException  

spring测试父类,使用junit-4.4.jar,spring-test.jar

@ContextConfiguration(locations = "classpath:conf/applicationContext.xml") @RunWith(SpringJUnit4ClassRunner.class) @Transactional @TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true) public abstr

Spring整合Junit4

1.加入相应依赖包 junit4-4.7.jar 以及spring相关jar包 2.在测试代码的源码包中如 src/test/java 新建一个抽象类如下 1 import org.junit.runner.RunWith; 2 import org.springframework.test.context.ContextConfiguration; 3 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

JAVAWEB开发之Spring详解之——Spring的入门以及IOC容器装配Bean(xml和注解的方式)、Spring整合web开发、整合Junit4测试

Spring框架学习路线 Spring的IOC Spring的AOP,AspectJ Spring的事务管理,三大框架的整合 Spring框架概述 什么是Spring? Spring是分层的JavaSE/EE full-stack(一站式)轻量级开源框架. 所谓分层: SUN提供的EE的三层结构:web层.业务层.数据访问层(也称持久层,集成层). Struts2是web层基于MVC设计模式框架. Hibernate是持久的一个ORM的框架. 所谓一站式:Spring框架有对三层的每层解决方案.

web项目中 集合Spring&amp;使用junit4测试Spring

web项目中 集合Spring 问题: 如果将 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); HelloService helloService = (HelloService) applicationContext.getBean("helloService"); helloService.sayHello(

spring学习总结(mybatis,事务,测试JUnit4,日志log4j&amp;slf4j,定时任务quartz&amp;spring-task,jetty,Restful-jersey等)

在实战中学习,模仿博客园的部分功能.包括用户的注册,登陆:发表新随笔,阅读随笔:发表评论,以及定时任务等.Entity层设计3张表,分别为user表(用户),essay表(随笔)以及comment表(评论).表结构如下: 项目开发采用Intellij IDEA + maven,整个项目结构如下如下图所示: 在项目的pom.xml文件中,导入项目需要的依赖.pom.xml内容如下所示: 1 <project xmlns="http://maven.apache.org/POM/4.0.0&q

junit4 spring集成测试

很多时候我看见小伙伴这样测试spring的service或者dao,每个类后面写个main,使用new方式加载spring配置文件,获取需要测试的实例,然后对实例进行测试.稍微好一点的在junit测试类里面new加载spring配置文件进行测试. 其实junit测试spring可以很方便的进行.这里会用到spring-test-xxx.jar,junit4的jar. 其中要注意的是: @RunWith(SpringJUnit4ClassRunner.class) 1.如果spring配置文件ap