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

原创 2018年04月15日 21:30:30

今天在用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)即可。

后续有坑再补

Java测试框架比较:TestNG VS JUnit 4

TestNG和JUnit是针对Java语言的两个比较常用的测试框架。JUnit出现的比较早,但是早期的JUnit 3对测试代码有非常多的限制,使用起来很不方便,后来的JUit 4得到很大的改进。Tes...
  • Super_Eagle
  • Super_Eagle
  • 2013-07-31 21:23:09
  • 10307

junit 和 testNG的区别

一、junit 和 testNG的区别 1.Junit是什么?          JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成...
  • qq_37061799
  • qq_37061799
  • 2017-03-21 13:55:45
  • 436

JUnit 4 与 TestNG 对比

http://fuxueliang.com/java/2013/06/26/junit-4-vs-testng--comparison/ 这两天在看一本书《Java测试新技术TestNG和高...
  • hotdust
  • hotdust
  • 2016-11-30 11:44:22
  • 641

TestNG 学习总结 - TestNG运行JUnit测试(十三)

现在,您已经了解了TestNG和它的各种测试,如果现在担心如何重构现有的JUnit代码,那就没有必要,使用TestNG提供了一种方法,从JUnit和TestNG按照自己的节奏。也可以使用TestNG执...
  • a578133380
  • a578133380
  • 2016-04-21 08:54:06
  • 541

TestNG 与 Junit的比较

转自 http://www.blogjava.net/fanscial/archive/2005/12/14/23780.html 1.         JDK 5 Annotation...
  • rain1999
  • rain1999
  • 2012-11-21 10:37:39
  • 17535

TestNG与Junit的基本区别

自动化的框架选择webdriver+TestNG+Ant,是因为便于Daily Build 和Ant的集成,而单元测试框架选择TestNG是由于具有以下优势,最主要体现"直接用Excel做为数据源...
  • luozhuwang
  • luozhuwang
  • 2013-11-09 14:39:07
  • 3981

TestNG运行JUnit测试

现在,您已经了解了TestNG和它的各种测试,如果现在担心如何重构现有的JUnit代码,那就没有必要,使用TestNG提供了一种方法,从JUnit和TestNG按照自己的节奏。也可以使用TestNG执...
  • zm_21
  • zm_21
  • 2014-06-20 15:50:45
  • 1285

Jenkins集成TestNG Junit自动化测试

自动化测试是Jenkins持续集成和部署的又一核心价值体现,我们先来做一个基于Junit 的 TestNG 测试。我们的实现步骤是:1、在Jenkins上安装xUnit插件;2、在Eclipse上安...
  • boonya
  • boonya
  • 2017-08-18 16:10:17
  • 3575

Spring10种常见异常解决方法

在程序员生涯当中,提到最多的应该就是SSH三大框架了。作为第一大框架的Spring框架,我们经常使用。 然而在使用过程中,遇到过很多的常见异常,我在这里总结一下,大家共勉。 一、找不到配置文件的异...
  • evo_steven
  • evo_steven
  • 2015-02-28 14:54:41
  • 97356

Spring 条件注解(@Conditional)

通过活动的profile,我们可以获得不同的Bean。Spring 4提供了一个更通用的基于条件的Bean的创建方式,即使用@Conditional注解。 @Conditional根据满足某个特定的...
  • xiaolyuh123
  • xiaolyuh123
  • 2017-03-20 14:26:29
  • 4895
收藏助手
不良信息举报
您举报文章:Spring环境下使用TestNG进行单元测试及出现的各种问题
举报原因:
原因补充:

(最多只允许输入30个字)