Spring环境下使用TestNG进行单元测试及出现的各种问题

今天在用Spring整合MyBatis后,在使用单元测试时发现了一些坑

package com.germa.service;

import com.germa.domain.Forum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.testng.AbstractTransactionalTestNGSpringContextTests;
import org.testng.annotations.Test;


@ContextConfiguration("classpath:applicationContext-mybatis.xml")
@Rollback(false)
public class TestMyBatis extends
        AbstractTransactionalTestNGSpringContextTests {

    private ForumService forumService;
    @Autowired
    public void setForumService(ForumService forumService) {
        this.forumService = forumService;
    }

    @Test
    public void testAddForum(){
        //ApplicationContext ctx=new ClassPathXmlApplicationContext("classpath:applicationContext-mybatis.xml");
       // this.forumService=(ForumService)ctx.getBean("forumService");
        Forum forum=new Forum();
        forum.setForumId(3);
        forum.setForumName("forum3");
        forum.setForumDesc("Desc3");
        this.forumService.addForum(forum);
    }
    
}

第一个坑:在一开始测试时我直接新建一个测试类,并给类注解@ContextConfiguration("classpath:applicationContext-mybatis.xml"),想通过注解自动加载配置文件,然后在直接在想要测试的方法前加了testng的@Test,一运行,报错NullPointerException,然后我试了在方法内部用ApplicationContext手动加载,结果就可以了,发现是想要的Bean没有被自动注入,网上查了一下,原来在测试类想要融入Spring环境下(注解自动加载配置文件),必须extends 一个叫AbstractTransactionalTestNGSpringContextTests的类,此时,问题得以解决。

第二个坑:方法成功运行,结果却在数据库看不到相应的结果,困顿许久,看了下测试产生的信息,原来是继承AbstractTransactionalTestNGSpringContextTests在测试时会自动启动事务,自动回滚,这时,只需要给测试类注解@RollBack(false)即可。

后续有坑再补

阅读更多
文章标签: Test Spring
个人分类: Spring学习
上一篇Spring小Demo实现页面跳转
下一篇Java I/O 学习
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭