在ecipse里Spring框架中进行JUnit单元测试
测试对于保证软件开发质量有着非常重要的作用,单元测试更是必不可少,JUnit是一个非常强大的单元测试包,可以对一个/多个类的单个/多个方法测试,还可以将不同的TestCase组合成TestSuit,使测试任务自动化。Eclipse同样集成了JUnit,可以非常方便地编写TestCase。
一、 JUnit核心
JUnit 的目的是协助您进行单元测试(Unit Test),并鼓励您先写测试。
JUnit包括了以下的特性:
对预期结果作断言
提供测试装备的生成与销毁
易于组织与执行测试
图型与文字介面的测试器
JUnit的核心类:TestCase、TestSuite以及BaseTestRunner,其中用的最多的就是TestCase,当需要多个TestCase的时候就要创建一个TestSuite,而运行TestSuite则要创建TestRunner,其关系如下:
核心类定义:
TestCase(测试用例)——扩展了JUnit的TestCase类的类。它以testXXX方法的形式包含一个或多个测试。一个test case把具有公共行为的测试归入一组。在本书的后续部分,当我们提到测试的时候,我们指的是一个testXXX方法;当我们提及test case的时候,我们指的是一个继承自TestCase的类,也就是一组测试。
TestSuite(测试集合)——一组测试。一个test suite是把多个相关测试归入一组的便捷方式。例如,如果你没有为TestCase定义一个test suite,那么JUnit就会自动提供一个test suite,包含TestCase中所有的测试(本书稍后会细说)。
TestRunner(测试运行器)——执行test suite的程序。JUnit提供了几个test runner,你可以用它们来执行你的测试。没有TestRunner接口,只有一个所有test runner都继承的BaseTestRunner。因此,当我们编写TestRunner的时候,我们实际上指的是任何继承BaseTestRunner的test runner类。
其中TesetCase主要有10个自己的方法:
二、下面就以Eclipse中单个TestCase为例子讲一下普通的JUnit测试:
首先我们创建一个Java工程,添加一个example.Hello类,首先我们给Hello类添加一个abs()方法,作用是返回绝对值:
下一步,我们准备对这个方法进行测试,确保功能正常。选中Hello.java,右键点击,选择New->JUnit Test Case:
Eclipse会询问是否添加junit.jar包,确定后新建一个HelloTest类,用来测试Hello类。
选中setUp()和tearDown(),然后点击“Next”:
选择要测试的方法,我们选中abs(int)方法,完成后在HelloTest.java中输入:
JUnit会以以下顺序执行测试:(大致的代码)
try { HelloTest test = new HelloTest(); // 建立测试类实例 test.setUp(); // 初始化测试环境 test.testAbs(); // 测试某个方法 test.tearDown(); // 清理资源 } catch…
|
setUp()是建立测试环境,这里创建一个Hello类的实例;tearDown()用于清理资源,如释放打开的文件等等。以test开头的方法被认为是测试方法,JUnit会依次执行testXxx()方法。在testAbs()方法中,我们对abs()的测试分别选择正数,负数和0,如果方法返回值与期待结果相同,则assertEquals不会产生异常。
如果有多个testXxx方法,JUnit会创建多个XxxTest实例,每次运行一个testXxx方法,setUp()和tearDown()会在testXxx前后被调用,因此,不要在一个testA()中依赖testB()。
直接运行Run->Run As->JUnit Test,就可以看到JUnit测试结果:
绿色表示测试通过,只要有1个测试未通过,就会显示红色并列出未通过测试的方法。可以试图改变abs()的代码,故意返回错误的结果(比如return n+1;),然后再运行JUnit就会报告错误。
三、在Spring中进行DAO测试
Spring提供了下列一些特定的JUnit框架扩展:
AbstractDependencyInjectionSpringContextTests—这是一个针对所有测试的超类,其具体使用依赖于Spring上下文。
AbstractSpringContextTests—这是一个针对所有的JUnit测试情形的超类。它使用一个Spring上下文。并且,一般在测试中不是直接使用它,而是使用AbstractDependencyInjectionSpringContextTests或者AbstractTransactionalSpringContextTests这样的派生类。
AbstractTransactionalSpringContextTests—这是一个针对所有测试的超类,我们一般把它应用在事务相关的测试中。注意,一旦完成每个测试它就会正常地回滚事务;而且你需要重载onSetUpInTransaction和onTearDownInTransaction方法以便手工开始并提交事务。
AbstractTransactionalDataSourceSpringContextTests—这是AbstractTransactionalSpringContextTests的一个子类,它使用了Spring的基于JDBC的jdbcTemplate工具类。
所有上面这些扩展将极大程度地简化在测试时对于相关操作的依赖性注入和事务管理。
下面就以一个用户DAO类HibernateUserDao类中的一个方法getPasswordByName(String userName)进行测试作为例子,其中输入是用户名,输出是用户密码:
测试类:
//HibernateUserDAOTest.java
public class HibernateUserDAOTest extends AbstractTransactionalDataSourceSpringContextTests
{
ApplicationContext applicationContext;
HibernateUserDAO hub;
@Override
protected String[] getConfigLocations()
{
String[] config=new String[]{"file:D:\\test\\WebRoot\\WEB-INF\\classes\\applicationContext.xml"};
return config;
}
public ApplicationContext getContext(String[] filePath)
{
return new ClassPathXmlApplicationContext(filePath);
}
public void testConfig() {
assertNotNull("spring-mock context has bean init()",this.getConfigLocations());
}
@Test
public final void testGetPasswordByName() throws BaseException
{
hub=(HibernateUserDAO)getContext(getConfigLocations()).getBean("hibernateUserDAO");
assertEquals("234",hub.getPasswordByName("42"));
}
public static void main(String[] args)
{
TestRunner.run((Class<!---->extends TestCase>) HibernateUserDAO.class);<
分享到:
相关推荐
SSH框架是Struts2.3.8+Spring3.2.16+Hibernate4.1.7,带junit4单元测试,加入bootstrap css 框架和Jquery,利用注解的方式使用hibernate和Spring,连接数据库oracle 12c。
Spring Boot 2 REST API的JUnit 5测试用例如何使用Spring Boot Test框架和JUnit 5对RESTful Web服务进行单元测试的示例。它使用MockMvc来提供Spring MVC基础结构,而无需启动HTTP Server。 SpringExtension和@...
7.Spring+Junit4单元测试,优点:不会破坏数据库现场,等等。 2)Demo 导入说明: 1.Eclipse Encoding:GBK 2.Eclipse 导入后可能需要在 Xml Catalog 手动添加:ehcache-spring-1.2.xsd(ehcache-spring-annotations...
spring-test.jar:对JUNIT等测试框架的简单封装 spring-tx.jar:为JDBC、Hibernate、JDO、JPA等提供的一致的声明式和编程式事务管理。 spring-webmvc-portlet.jar:Spring MVC的增强 spring-websocket.jar:
分3篇重点讲解Struts、Hibernate、Spring框架技术及这些技术的整合应用;基于Struts1的SSH整合架构,并开发个人通讯录和一个完整的办公自动化系统,实现的功能包括日程安排、工作日志、短消息管理、公告管理、会议...
展示了与测试有关的折衷考虑,这样您就能在测试什么和怎么测试方面做出更好的决定。 介绍了TestNG,说明了它的目标和功能,并展示了如何在真实的环境中应用这些功能。 展示了如何集成TestNG和已有的代码、开发框架...
工程名ssmm表示:springmvc+spring+mybatis+maven ...使用Junit4进行单元测试, 使用Log4j管理日志 本例仅为示例,结构简单,不包含Ajax 测试url http://localhost:8080/ssmm_demo/userController/showUser.do?id=1 ...
6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...
SSH框架是Struts2.3.8+Spring3.2.16+Hibernate4.1.7,带junit4单元测试,连接数据库oracle 12c
在eclipse中导出为可执行的jar,无需部署到任何web容器中。直接通过bat或shell启动即可。 系统启动时自动从数据库中读取框架配置信息,job信息,调度信息注入到框架中。 本系统内嵌了jetty作为框架的web接口为本框架...
➢ 熟悉 dbunit、JUnit 单元测试工作,了解 EasyMocK、stub、hamcrest、suite 完成项目 模块的单元测试工作 ➢ 熟练使用 SpringBoot 简化 SpringCloud 进行微服务架构的搭建,熟悉微服务模块,如 Eureka服务的...
您将学到什么您将学习Spring框架的基础知识-依赖注入,IOC容器,应用程序上下文和Bean工厂。 您将了解如何使用Spring注释-@ Autowired,@ Component,@ Service,@ Repository,@ Configuration,@ Primary...。 您...
展示了与测试有关的折衷考虑,这样您就能在测试什么和怎么测试方面做出更好的决定。 介绍了TestNG,说明了它的目标和功能,并展示了如何在真实的环境中应用这些功能。 展示了如何集成TestNG和已有的代码、开发框架...
《开发者突击:Java Web主流框架整合开发(第2版)(含CD光盘1张)》是畅销书《开发者突击:Java Web主流框架整合开发(J2EE+Struts+ Hibernate+Spring)》的第2版,全面地讲解了Java Web开发中的流行技术和软件架构,...
6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...
java 搭建Java商城项目需要以下步骤: 1. 环境准备:确保你的电脑上已经安装...可以使用单元测试框架,如JUnit,来进行测试。 7. 部署和发布:完成开发和测试后,将项目部署到服务器上,并进行发布。可以使用Tomcat等
本实例的环境 eclipse + maven + spring + ehcache + junit EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。Ehcache是一种广泛使用的开 源Java分布式缓存。主要...
6.3.6 在代码中使用Log4j 6.4 改进Log4j 6.5 小结 第七章 Ant使用指南 7.1 Ant介绍 7.1.1 Ant简介 7.1.2 为什么要使用Ant 7.2 建立Ant的开发环境 7.2.1 下载Ant 7.2.2 配置Ant 7.3 Ant的使用方法 7.3.1 Ant能完成的...
6.3.6 在代码中使用Log4j 6.4 改进Log4j 6.5 小结 第七章 Ant使用指南 7.1 Ant介绍 7.1.1 Ant简介 7.1.2 为什么要使用Ant 7.2 建立Ant的开发环境 7.2.1 下载Ant 7.2.2 配置Ant 7.3 Ant的使用方法 7.3.1 Ant能完成的...
JAVA通用快速开发框架源码 注意:不带技术支持,有帮助文件,虚拟商品,发货不退,看好再拍。...· 单元测试:JUnit 4.12 · API接口文档:Swagger 2.7.0 · 页面交互:Vue 2.x + Bootstrap+ HTML5 + CSS3