环境 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()); } }
这种方式只是为了方便其他人调用这个公共类测试,其效率由于第一次加载后会再次加载所以会比较低,而且不知道会不会引起其他错误,欢迎大牛指正
相关推荐
JUnit是Java编程语言中最常用的单元测试框架之一,它允许开发者编写可重复运行的测试用例,以确保代码的正确性和稳定性。本教程将围绕JUnit 4.8版本展开,这个版本在当时是JUnit的一个重要里程碑,引入了许多改进...
Junit4.8则是Java单元测试的重要工具,它使得开发者可以方便地编写和执行测试用例,确保代码的正确性。而多线程在现代编程中扮演着关键角色,特别是在处理并发任务、提高系统效率时。 在"spring4+junit4.8 +多线程...
Struts2+Spring+Hibernate 中的Action单元测试环境搭建 在软件开发中,单元测试是一种非常重要的测试方法,可以帮助我们确保代码的可靠性和稳定性。在 Struts2+Spring+Hibernate 框架中,对 Action 的单元测试环境...
《Junit 4.8:单元测试框架的深度解析》 JUnit是Java编程语言中广泛使用的单元测试框架,尤其在敏捷开发和持续集成环境中扮演着重要角色。标题中的"junit-4.8.jar.zip"指出我们要讨论的是JUnit 4.8版本,这是该框架...
这是一个基于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
3. **参数化测试(Parameterized Tests)**:JUnit 4.8支持参数化测试,允许用不同的输入数据多次运行同一个测试方法。这对于验证函数在各种边界条件下的行为非常有用。 4. **测试规则(Test Rules)**:通过`@Rule...
JUnit4.8.jar JUnit4.jar
JUnit是Java编程语言中最常用的单元测试框架之一,它允许开发者编写可执行的测试用例来验证代码的功能。这里我们讨论的是JUnit 4.8版本的jar包,这是一个更新的版本,意味着它可能包含了修复的问题、改进的功能以及...
在IT行业中,构建一个高效的Java应用开发环境是至关重要的,而"Maven+Spring+MyBatis+MySQL+JUnit"的组合则是一个常见的选择。这个框架集合涵盖了项目构建、依赖管理、业务逻辑处理、数据库交互以及单元测试等多个...
1. **配置测试环境**:引入Spring Test和JUnit相关的依赖,创建一个继承自`AbstractJUnit4SpringContextTests`或`SpringRunner`的测试类。在测试类上使用`@RunWith(SpringRunner.class)`注解启用Spring测试支持,并...
基于Springboot+Junit+Mockito做单元测试的示例 本文将从多个角度详细介绍如何使用Springboot、Junit和Mockito进行单元测试,并以实例代码演示。以下是本文的知识点总结: 一、单元测试的重要性 单元测试是软件...
【Ant+JUnit+Svn实现自动单元测试】 Ant是一种流行的Java构建工具,它使用XML格式的构建文件(build.xml)来定义一系列的任务,如编译、打包、测试等,以自动化软件开发过程。Ant的主要优点是它的灵活性和可扩展性...
本下载为java开发必备测试工具junit.jar包,JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit...多数Java的开发环境都已经集成了JUnit作为单元测试的工具。
Spring框架结合JUnit4和Ant构建的测试环境,能够有效地帮助开发者进行高效、可靠的测试。本篇将深入探讨如何利用这些工具进行测试,以及它们各自的关键功能。 首先,让我们了解Spring框架。Spring是Java企业级应用...
在集成开发环境中,JUnit测试通常与持续集成工具一起使用,以保证每次代码更改后都能进行自动测试。 在这个整合项目中,`index.jsp`可能是应用的主页面,展示给用户的第一界面。`WEB-INF`目录包含应用的配置文件,...
通过Spring集成单元测试,以后测试service层内容时,就不用getBean()来获得Service层对象了
本文将深入探讨如何在Spring4环境中利用JUnit进行简单测试。 首先,让我们了解Spring4中的测试支持。Spring4引入了`@ContextConfiguration`注解,用于指定上下文配置文件的位置,这样可以在测试类上声明以加载特定...
在案例中,你将看到如何创建测试类,定义测试方法,设置测试数据,以及如何利用JUnit和Spring/Struts提供的工具来编写高效的单元测试。通过分析和运行源码,你可以了解如何将这些概念应用于实际项目,提高代码质量。...
1. 使用`@RunWith(SpringRunner.class)`和`@ContextConfiguration`设置Spring测试环境。 2. `@Autowired`注解注入需要测试的bean。 3. 编写`@Test`注解的测试方法,结合断言进行验证。 4. 关注测试的隔离性,可能...