`

spring 环境下 的单元测试 spring3+junit4.8 各种测试方法写法

 
阅读更多

环境  spring 3 + junit4.8

 第一种方法 老版本里常用 AbstractTransactionalDataSourceSpringContextTests

 

首先引入 junit4.8jar包 ,一般eclipse自带的library里是有的,可以直接引入

spring方面要引入 org.springframework.test-3.0.5.RELEASE.jar包

 

创建一个basetestcase类

继承AbstractTransactionalDataSourceSpringContextTests

 

public abstract class BaseTestCase extends AbstractTransactionalDataSourceSpringContextTests{
 protected static final Logger log = LoggerFactory.getLogger(BaseTestCase.class);

    /**
     * spring配置文件的路径前缀
     */
    protected static final String CONFIG_PREFIX = "classpath:conf/spring";

    /**
     * 定义默认的Spring Context的主文件路径.
     */
    protected static final String DEFAULT_MAIN_CONTEXT = "classpath:conf/spring/applicationContext.xml";
   
    protected static final String LEADIN_CONTEXT = "classpath:conf/spring/leadinServiceContext.xml";

    /**
     * 定义除主文件外所有的Spring Context文件集合的路径.
     */
    protected static final String All_CONTEXT = "classpath:conf/spring/*.xml";

/**
     * @see AbstractTransactionalDataSourceSpringContextTests#getConfigLocations()
     */
    @Override
    protected String[] getConfigLocations() {
        // 设置AUTOWIRE_BY_NAME ,因为Spring的测试基类默认为BY_TYPE,在有多个相同类型的Bean时冲突.
        // 或者取消setter函数,自行用applicationContext.getBean()来显式查找Bean.
        setAutowireMode(AUTOWIRE_BY_NAME);

        // 默认载入所有的spring配置的bean,在子类可重载此函数以减少载入的applicaitonContext.xml,加快测试速度.
        List<String> contexts = new ArrayList<String>();
        contexts.add(DEFAULT_MAIN_CONTEXT);
        contexts.add(LEADIN_CONTEXT);
        contexts.add("classpath:conf/spring/baseCommonDaoContext.xml");
        contexts.add("classpath:conf/spring/baseCommonServiceContext.xml");
        contexts.add("classpath:conf/spring/baseContext.xml");
        contexts.add("classpath:conf/spring/baseFrameContext.xml");
        contexts.add("classpath*:mq-server-bootstrap-config.xml");       
       
        List<String> neededContexts = Arrays.asList(getNeededConfigLocations());
        contexts.addAll(neededContexts);
        return contexts.toArray(new String[] {});
    }

/**
     * 子类只需重写此方法
     */
    protected abstract String[] getNeededConfigLocations();

    protected Object getBean(String name) {
        return applicationContext.getBean(name);
    }

}

 

测试类KgEnrollDaoTest

public class KgEnrollDaoTest extends BaseTestCase {
 @Autowired
 private KgEnrollTimeDao kgEnrollTimeDao;
 
 @Override
 protected String[] getNeededConfigLocations() {
        return new String[] { "classpath:/conf/spring/KgEnrollDaoContext.xml" };
    }
 
 
 public void testsave(){
  String unitId = "1111";
  String enrollyear = "1111";
  
  int i = kgEnrollTimeDao.checkExists(unitId, enrollyear);
  System.out.println(i);
 }
 
 
}

以上方法可以用来测试service和dao

 getNeededConfigLocations 用来引入需要测试的xml配置文件

 

 

但是spring3.0里不建议使用这个方法了 AbstractTransactionalDataSourceSpringContextTests

 

那么用什么来替代呢

可以用AbstractTransactionalJUnit4SpringContextTests来代替

 

package net.zdsoft.test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javax.sql.DataSource;

import org.junit.Before;
import org.junit.runner.RunWith;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
/**
 * 定义默认的Spring Context的主文件路径.以及你需要测试的配置文件
 */
@ContextConfiguration(locations = {"classpath:conf/spring/applicationContext.xml","classpath:/conf/spring/testContext.xml"})
public class MyTestCase extends AbstractTransactionalJUnit4SpringContextTests{
	
  @Test
 
  public void testGetTeacher(){
  
      System.out.println("1");
  
      TestDao testDao= (TestDao)this.applicationContext.getBean("testDao");
 
      System.out.println(testDao.getNormalEmployee("B6EE1FEBB344E730E040817B11FE7186",null).size());
 
  }
		
}

如果不使用 applicationContext.getBean,可以使用@Autowired注解注入

import javax.sql.DataSource;

import org.junit.Before;
import org.junit.runner.RunWith;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
/**
 * 定义默认的Spring Context的主文件路径.以及你需要测试的配置文件
 */
@ContextConfiguration(locations = {"classpath:conf/spring/applicationContext.xml","classpath:/conf/spring/testContext.xml"})
public class MyTestCase extends AbstractTransactionalJUnit4SpringContextTests{
   @Autowired
  private TestDao testDao;
	
  @Test 
  public void testGetTeacher(){   
      System.out.println(testDao.getNormalEmployee("B6EE1FEBB344E730E040817B11FE7186",null).size()); 
  }
		
}

 与AbstractTransactionalDataSourceSpringContextTests所写的方法的区别在于 最上面这种方式通过抽象类实现了主配置文件applicationcontext.xml以及一些系统必须的配置文件的加载,并提供了一个抽象方法供子类加入自己想要测试的bean所在的配置文件,只要写一个公共的抽象类 子类集成即可

AbstractTransactionalJUnit4SpringContextTests的方式降低了通用性

 

为了提供类似的通用性 我写了一个方法,但不确认完全正确 经供参考

同样写了一个类似方法1的抽象类

 

package net.zdsoft.test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javax.sql.DataSource;

import org.junit.Before;
import org.junit.runner.RunWith;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
/**
 * 定义默认的Spring Context的主文件路径.
 */
@ContextConfiguration(locations = {"classpath:conf/spring/applicationContext.xml"})
//@ContextConfiguration(locations = {"classpath:conf/spring/applicationContext.xml","classpath:/conf/spring/personnelContext.xml"})
public abstract class BaseCase extends AbstractTransactionalJUnit4SpringContextTests{
	
	
	@Before
	public void init(){
		//初始化spring
		List<String> locations = new ArrayList<String>();
		locations.add("classpath:conf/spring/applicationContext.xml");
		//加载子类的配置文件
		locations.addAll(Arrays.asList(getExLoactions()));
		ApplicationContext context = new FileSystemXmlApplicationContext(locations.toArray(new String[0]));
		super.setApplicationContext(context);
		super.setDataSource((DataSource)context.getBean("dataSource"));
	}
	
	/**
	 * 提供子类覆盖
	 * 设置子类要加载的配置文件
	 * @return
	 */
	public abstract String[] getExLoactions();
}

 

通过@Before注解 再次加载applicationcontext (记得要把主要配置文件和一些系统必须的再次加入)

把子类覆盖的配置文件也加载进来

然后重置测试类中的applicationcontext的值

 

package net.zdsoft.test;

import org.junit.Test;

import net.zdsoft.eis.personnel.info.dao.EmployeeDao;


public class TestDao extends BaseCase{
	
	@Override
	public String[] getExLoactions() {
		return new String[]{"classpath:/conf/spring/testContext.xml"};
	}
	
	@Test
	public void testGetTeacher(){
		System.out.println("1");
		TestDao testDao = (TestDao)this.applicationContext.getBean("testDao");
		System.out.println(testDao.getNormalEmployee("B6EE1FEBB344E730E040817B11FE7186",null).size());
	}

}

 

这种方式只是为了方便其他人调用这个公共类测试,其效率由于第一次加载后会再次加载所以会比较低,而且不知道会不会引起其他错误,欢迎大牛指正 

分享到:
评论

相关推荐

    Jnuit单元测试PDF教程+Junit4.8 jar

    JUnit是Java编程语言中最常用的单元测试框架之一,它允许开发者编写可重复运行的测试用例,以确保代码的正确性和稳定性。本教程将围绕JUnit 4.8版本展开,这个版本在当时是JUnit的一个重要里程碑,引入了许多改进...

    spring4+junit4.8 +多线程TheadTool

    Junit4.8则是Java单元测试的重要工具,它使得开发者可以方便地编写和执行测试用例,确保代码的正确性。而多线程在现代编程中扮演着关键角色,特别是在处理并发任务、提高系统效率时。 在"spring4+junit4.8 +多线程...

    Struts2+Spring+hibernate中对action的单元测试环境搭建[总结].pdf

    Struts2+Spring+Hibernate 中的Action单元测试环境搭建 在软件开发中,单元测试是一种非常重要的测试方法,可以帮助我们确保代码的可靠性和稳定性。在 Struts2+Spring+Hibernate 框架中,对 Action 的单元测试环境...

    junit-4.8.jar.zip

    《Junit 4.8:单元测试框架的深度解析》 JUnit是Java编程语言中广泛使用的单元测试框架,尤其在敏捷开发和持续集成环境中扮演着重要角色。标题中的"junit-4.8.jar.zip"指出我们要讨论的是JUnit 4.8版本,这是该框架...

    spring3 + mybatis3 + junit4 可运行项目示例

    这是一个基于Spring3、MyBatis3和JUnit4的可运行项目示例,旨在提供一个完整的、可测试的Java Web应用程序框架。这个项目的核心是利用Spring作为应用的ioc(Inversion of Control,控制反转)和aop(Aspect Oriented...

    Junit4.8_API_chm

    Junit4.8 API chm Junit4.8 API chm Junit4.8 API chm Junit4.8 API chm Junit4.8 API chm

    junit-4.8.zip

    3. **参数化测试(Parameterized Tests)**:JUnit 4.8支持参数化测试,允许用不同的输入数据多次运行同一个测试方法。这对于验证函数在各种边界条件下的行为非常有用。 4. **测试规则(Test Rules)**:通过`@Rule...

    JUnit4.8.jar

    JUnit4.8.jar JUnit4.jar

    junit4.8jar包 最新的!!!

    JUnit是Java编程语言中最常用的单元测试框架之一,它允许开发者编写可执行的测试用例来验证代码的功能。这里我们讨论的是JUnit 4.8版本的jar包,这是一个更新的版本,意味着它可能包含了修复的问题、改进的功能以及...

    maven+spring+mybatis+mysql+junit jar项目框架搭建

    在IT行业中,构建一个高效的Java应用开发环境是至关重要的,而"Maven+Spring+MyBatis+MySQL+JUnit"的组合则是一个常见的选择。这个框架集合涵盖了项目构建、依赖管理、业务逻辑处理、数据库交互以及单元测试等多个...

    spring MVC junit 单元测试(controller)

    1. **配置测试环境**:引入Spring Test和JUnit相关的依赖,创建一个继承自`AbstractJUnit4SpringContextTests`或`SpringRunner`的测试类。在测试类上使用`@RunWith(SpringRunner.class)`注解启用Spring测试支持,并...

    基于Springboot+Junit+Mockito做单元测试的示例

    基于Springboot+Junit+Mockito做单元测试的示例 本文将从多个角度详细介绍如何使用Springboot、Junit和Mockito进行单元测试,并以实例代码演示。以下是本文的知识点总结: 一、单元测试的重要性 单元测试是软件...

    Ant+Junit+Svn实现自动单元测试

    【Ant+JUnit+Svn实现自动单元测试】 Ant是一种流行的Java构建工具,它使用XML格式的构建文件(build.xml)来定义一系列的任务,如编译、打包、测试等,以自动化软件开发过程。Ant的主要优点是它的灵活性和可扩展性...

    junit4.8.jar

    本下载为java开发必备测试工具junit.jar包,JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit...多数Java的开发环境都已经集成了JUnit作为单元测试的工具。

    Spring+JUnit4 +Ant测试报告

    Spring框架结合JUnit4和Ant构建的测试环境,能够有效地帮助开发者进行高效、可靠的测试。本篇将深入探讨如何利用这些工具进行测试,以及它们各自的关键功能。 首先,让我们了解Spring框架。Spring是Java企业级应用...

    spring+springmvc+mybatis+maven+junit整合

    在集成开发环境中,JUnit测试通常与持续集成工具一起使用,以保证每次代码更改后都能进行自动测试。 在这个整合项目中,`index.jsp`可能是应用的主页面,展示给用户的第一界面。`WEB-INF`目录包含应用的配置文件,...

    spring+Junit4单元测试

    通过Spring集成单元测试,以后测试service层内容时,就不用getBean()来获得Service层对象了

    spring4+JUnit简单测试

    本文将深入探讨如何在Spring4环境中利用JUnit进行简单测试。 首先,让我们了解Spring4中的测试支持。Spring4引入了`@ContextConfiguration`注解,用于指定上下文配置文件的位置,这样可以在测试类上声明以加载特定...

    Junit 单元测试完整案例

    在案例中,你将看到如何创建测试类,定义测试方法,设置测试数据,以及如何利用JUnit和Spring/Struts提供的工具来编写高效的单元测试。通过分析和运行源码,你可以了解如何将这些概念应用于实际项目,提高代码质量。...

    基于Spring的JUnit单元测试

    1. 使用`@RunWith(SpringRunner.class)`和`@ContextConfiguration`设置Spring测试环境。 2. `@Autowired`注解注入需要测试的bean。 3. 编写`@Test`注解的测试方法,结合断言进行验证。 4. 关注测试的隔离性,可能...

Global site tag (gtag.js) - Google Analytics