`

Spring_MVC(6)测试

阅读更多

这里将用到以下几个包:

引用

aopalliance-1.0.jar
commons-collections.jar
commons-dbcp.jar
commons-logging-1.1.1.jar
commons-pool.jar
junit-4.4.jar
jstl.jar
log4j-1.2.15.jar
mysql-connector-java-5.1.6-bin.jar
spring-aop-2.5.6.jar
spring-beans-2.5.6.jar
spring-context-2.5.6.jar
spring-context-support-2.5.6.jar
spring-core-2.5.6.jar
spring-jdbc-2.5.6.jar
spring-tx-2.5.6.jar
spring-test-2.5.6.jar
spring-web-2.5.6.jar
spring-webmvc-2.5.6.jar
standard.jar


主要增加了spring-test-2.5.6.jar和junit-4.4.jar两个用于测试的包!
这里尤其要说明一下,由于我们使用注解方式自然要用到JUnit-4.X系列,而Sring-Test对于JUnit有个累人的要求,JUnit的版本必须是4.4,不支持高版本(如4.5、4.7等)。否则,会产生java.lang.ClassNotFoundException: org.junit.Assume$AssumptionViolatedException异常。
先来一个能够自动回滚的用于测试的父类——AbstractTestCase
AbstractTestCase.java

Java代码 复制代码
  1. /**  
  2.  * 2009-12-16  
  3.  */  
  4. package org.zlex.spring;   
  5.   
  6. import org.junit.runner.RunWith;   
  7. import org.springframework.test.AbstractTransactionalDataSourceSpringContextTests;   
  8. import org.springframework.test.context.ContextConfiguration;   
  9. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;   
  10. import org.springframework.test.context.transaction.TransactionConfiguration;   
  11. import org.springframework.transaction.annotation.Transactional;   
  12.   
  13. /**  
  14.  * @author <a href="mailto:zlex.dongliang@gmail.com">梁栋</a>  
  15.  * @version 1.0  
  16.  * @since 1.0  
  17.  */  
  18. @ContextConfiguration(locations = "classpath:applicationContext.xml")   
  19. @RunWith(SpringJUnit4ClassRunner.class)   
  20. @Transactional  
  21. @TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)   
  22. public abstract class AbstractTestCase extends  
  23.         AbstractTransactionalDataSourceSpringContextTests {   
  24.   
  25. }  
/**
 * 2009-12-16
 */
package org.zlex.spring;

import org.junit.runner.RunWith;
import org.springframework.test.AbstractTransactionalDataSourceSpringContextTests;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.transaction.annotation.Transactional;

/**
 * @author <a href="mailto:zlex.dongliang@gmail.com">梁栋</a>
 * @version 1.0
 * @since 1.0
 */
@ContextConfiguration(locations = "classpath:applicationContext.xml")
@RunWith(SpringJUnit4ClassRunner.class)
@Transactional
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
public abstract class AbstractTestCase extends
		AbstractTransactionalDataSourceSpringContextTests {

}


让每一个测试类都写一堆配置忒麻烦! 索性来个老爹替子子孙孙都完成基础工作!
逐行分析:
@ContextConfiguration(locations = "classpath:applicationContext.xml")导入配置文件。这时候,我们可以看出之前使用applicationContext.xml文件作为系统总控文件的好处! 当然,Spring-Test的这个配置只认classpath,很无奈,我必须拷贝这些文件到根目录!
@RunWith(SpringJUnit4ClassRunner.class)SpringJUnit支持,由此引入Spring-Test框架支持!
@Transactional这个非常关键,如果不加入这个注解配置,事务控制就会完全失效!
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)这里的事务关联到配置文件中的事务控制器(transactionManager = "transactionManager"),同时指定自动回滚(defaultRollback = true)。这样做操作的数据才不会污染数据库!
AbstractTransactionalDataSourceSpringContextTests要想构建这一系列的无污染纯绿色事务测试框架就必须找到这个基类!
给出一个整体结构图:

test子目录下的文件将编译到classpath下,这其实还同时是个maven测试项目!拷一堆配置文件的确有些不方便!
AbstractTestCase.java用于抽象测试类控制。
AccountDaoTest.java用于AccountDao测试。
DaoAllTests.java用于Dao层的整体测试。
来看看AccountDaoTest
AccountDaoTest.java

Java代码 复制代码
  1. /**  
  2.  * 2009-12-16  
  3.  */  
  4. package org.zlex.spring;   
  5.   
  6. import java.util.Date;   
  7.   
  8. import org.junit.Test;   
  9. import org.springframework.beans.factory.annotation.Autowired;   
  10. import org.zlex.spring.dao.AccountDao;   
  11. import org.zlex.spring.domain.Account;   
  12.   
  13. /**  
  14.  * @author <a href="mailto:zlex.dongliang@gmail.com">梁栋</a>  
  15.  * @version 1.0  
  16.  * @since 1.0  
  17.  */  
  18. public class AccountDaoTest extends AbstractTestCase {   
  19.   
  20.     @Autowired  
  21.     private AccountDao accountDao;   
  22.   
  23.     @Test  
  24.     public void test() {   
  25.         Account ac = new Account();   
  26.         ac.setBirthday(new Date());   
  27.         ac.setUsername("SPRING");   
  28.         ac.setPassword("SNOWOLF");   
  29.         ac.setEmail("spring@zlex.org");   
  30.   
  31.         // 创建用户   
  32.         accountDao.create(ac);   
  33.   
  34.         // 检索   
  35.         Account account = accountDao.read("SPRING");   
  36.   
  37.         // 校验   
  38.         assertNotNull(account);   
  39.     }   
  40.   
  41. }  
/**
 * 2009-12-16
 */
package org.zlex.spring;

import java.util.Date;

import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.zlex.spring.dao.AccountDao;
import org.zlex.spring.domain.Account;

/**
 * @author <a href="mailto:zlex.dongliang@gmail.com">梁栋</a>
 * @version 1.0
 * @since 1.0
 */
public class AccountDaoTest extends AbstractTestCase {

	@Autowired
	private AccountDao accountDao;

	@Test
	public void test() {
		Account ac = new Account();
		ac.setBirthday(new Date());
		ac.setUsername("SPRING");
		ac.setPassword("SNOWOLF");
		ac.setEmail("spring@zlex.org");

		// 创建用户
		accountDao.create(ac);

		// 检索
		Account account = accountDao.read("SPRING");

		// 校验
		assertNotNull(account);
	}

}


只要记得使用注解@Test标识方法即可!
这里插入了一条数据,之后进行检索。如果数据存在则认为测试成功! 当然,这时候你要看看数据库是不是真的插入了一条数据!
执行这个方法,同时监控数据库,观察日志!最有效的办法是在执行检索方法时加入断点,同时监控数据库记录,你会发现此时数据库无此数据录入! 实际上这是一个未提交的事务!
完成操作,看看这时的日志:

数据库其实已经进行了回滚!
再看看DaoAllTests
DaoAllTests.java

Java代码 复制代码
  1. /**  
  2.  * 2009-12-17  
  3.  */  
  4. package org.zlex.spring;   
  5.   
  6. import org.junit.runner.RunWith;   
  7. import org.junit.runners.Suite;   
  8. import org.junit.runners.Suite.SuiteClasses;   
  9.   
  10. /**  
  11.  * @author <a href="mailto:zlex.dongliang@gmail.com">梁栋</a>  
  12.  * @version 1.0  
  13.  * @since 1.0  
  14.  */  
  15. @RunWith(Suite.class)   
  16. @SuiteClasses( { AccountDaoTest.class, AccountDaoTest.class })   
  17. public class DaoAllTests {   
  18.   
  19. }  
/**
 * 2009-12-17
 */
package org.zlex.spring;

import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;

/**
 * @author <a href="mailto:zlex.dongliang@gmail.com">梁栋</a>
 * @version 1.0
 * @since 1.0
 */
@RunWith(Suite.class)
@SuiteClasses( { AccountDaoTest.class, AccountDaoTest.class })
public class DaoAllTests {

}


逐行说明:
@RunWith(Suite.class)集合测试
@SuiteClasses( { AccountDaoTest.class })集合,包括AccountDaoTest类,多个测试类可使用逗号分隔!
这个测试类可用于Dao层集合测试,与Spring无关!

分享到:
评论
3 楼 liutao1600 2013-05-13  
楼主写的太好了,每天学习~~
2 楼 lgfeng2012 2012-04-06  
最后怎么没有源代码啊
1 楼 tamsiuloong 2010-06-28  
这么好的教程 居然没有人看,楼主 我Ding你啊。通俗易懂,不过代码好像你发重复了

相关推荐

    Spring_MVC 3.0整理汇总

    七至二十,这部分主要涵盖了Spring_MVC中的各种核心特性,如访问静态资源、请求映射、拦截器的使用、异常处理、单元测试、转发与重定向、处理AJAX请求、配置文件管理、获取Spring管理的bean、多视图控制器等。...

    Spring_MVC_教程_快速入门_深入分析 高清文字版PDF

    单元测试是软件开发的重要组成部分,Spring MVC提供了对JUnit单元测试的支持。这样,开发者可以编写测试用例,对控制器中的方法进行测试,确保业务逻辑的正确性。 在配置方面,Spring MVC允许灵活地配置多个不同的...

    开发Spring MVC应用程序补充—程序源码下载.rar_spring_spring mvc_spring mvc 源码_sp

    标题中的"开发Spring MVC应用程序补充—程序源码下载.rar_spring_spring mvc_spring mvc 源码_sp"表明这是一个关于Spring MVC框架的开发教程,其中包含了源代码供学习者参考。Spring MVC是Spring框架的一个核心组件...

    Hotel_SPring_MVC

    【Spring MVC 框架详解】 Spring MVC 是一个基于 Java 的模型-视图-控制器(MVC)架构,是 Spring 框架的一部分,用于构建Web应用程序。它为开发者提供了强大的控制层,使得开发过程更加模块化,易于测试和维护。在...

    spring_mvc框架搭建demo

    6. 测试应用,确保所有请求能够正确路由并返回预期结果。 通过这个“spring_mvc框架搭建demo”,你可以学习到如何从零开始构建一个简单的Spring MVC应用,理解每个部分的作用,并逐步掌握Spring MVC的核心概念和...

    为java_web项目添加spring_MVC框架(JSTL表达式)

    6. **运行与测试**:启动服务器,访问配置的URL,查看Spring MVC是否成功处理请求。 关于JSTL表达式,JSTL提供了多种标签,可以用来替代部分JSP脚本语言,提高代码的可读性和维护性。例如,`&lt;c:out&gt;`标签用于输出...

    Spring_MVC.rar

    Spring MVC 是一个强大的Java web应用程序开发框架,它属于Spring框架的一部分,主要用于构建高效、可维护的Web应用。这个“Spring_MVC.rar”压缩包显然包含了完整的Spring MVC工程模板,可以帮助开发者快速理解和...

    spring-mvc-jquery.zip_jquery_mvc jquery_spring jquery_spring mvc

    在IT行业中,Spring MVC和jQuery是两个非常重要的技术框架,它们在Web开发中扮演着关键角色。本项目“spring-mvc-jquery.zip”是关于如何将Spring MVC 3.0框架与jQuery进行整合的一个示例,旨在帮助开发者理解这两者...

    基于Maven的Spring_+_Spring_MVC_+_Mybatis的环境搭建

    6. **测试**:使用JUnit进行单元测试,确保各个模块功能正常。 完成以上步骤后,你将拥有一个完整的基于Maven的Spring、Spring MVC和Mybatis的开发环境,可以开始进行TimeSheet系统或者其他类似Web应用的开发工作。...

    Spring_MVC_MYBatis企业应用实战

    6. **高级主题**:可能包含AOP、Spring Boot、Spring Data JPA等扩展话题,以及性能优化、异常处理和单元测试等内容。 总之,学习这本教程可以帮助开发者深入理解Spring MVC和MyBatis的集成应用,提升企业级Web开发...

    spring_mvc_test

    Spring MVC 是一款强大的Java Web开发框架,用于构建可维护、高性能的Web应用程序。它作为Spring框架的一部分,提供了模型-视图-控制器(MVC)架构,简化了开发流程,使得开发者能够专注于业务逻辑,而非底层的HTTP...

    Spring_MVC.rar_T7Y_springmvc

    在本压缩包"Spring_MVC.rar_T7Y_springmvc"中,包含了初学者学习Spring MVC所需的基础配置和简单的log4j日志测试代码。 首先,我们来详细了解一下Spring MVC的核心概念和组成部分: 1. **DispatcherServlet**:...

    mybatis_spring_MVC_demo

    MyBatis是一个轻量级的持久层框架,它允许开发者通过SQL语句直接操作数据库,而Spring框架则提供了依赖注入和面向切面编程的功能,增强了应用的可测试性和可维护性。MVC(Model-View-Controller)模式是Web开发中...

    Spring_MVC_教程_快速入门_深入分析

    6. mvc.xml配置文件:该配置文件用于配置Spring MVC相关组件,例如Controller扫描、视图解析器等。在SpringMVC教程中,会对这个配置文件的各个片段进行详细讲解。 7. 静态资源访问:SpringMVC需要配置静态资源的...

    Spring_MVC详解学习

    Spring MVC是Spring框架中的一个核心模块,它遵循了MVC(Model-View-Controller,模型-视图-控制器)设计模式。Spring MVC允许开发者构建灵活且可维护的Web应用程序。配置Spring MVC框架是确保Web应用程序能够高效...

    spring_mvc学习笔记

    Spring Test模块提供了JUnit集成,使得测试Spring MVC应用变得简单。可以通过MockMvc类模拟HTTP请求,进行控制器单元测试。 在学习Spring MVC时,了解这些核心概念并结合实际项目进行实践,将有助于深入理解和掌握...

    深入浅出学Spring_Web_MVC

    ### 深入浅出学Spring Web MVC #### 一、Spring Web MVC 概述 **Spring Web MVC** 是一种轻量级的、基于MVC(Model-View-Controller)设计模式的Web应用框架,是Spring框架的重要组成部分之一。它为开发者提供了...

    spring_mvc + spring + mybaist 集成

    标题 "spring_mvc + spring + mybaist 集成" 涉及的是一个常见的企业级Java Web应用开发框架组合。Spring MVC是Spring框架的一部分,用于构建Web应用程序的前端控制器,Spring则提供了全面的依赖注入(DI)和面向切...

    Spring-MVC-step-by-step.zip_Java MVC spring_Java spring mvc_sp

    Spring MVC提供MockMvc工具,可以在不依赖Web服务器的情况下对Controller进行单元测试,方便快捷。 十二、实践操作 本教程中的"Spring-MVC-step-by-step.pdf"文件将详细介绍上述概念,并通过实例代码演示如何配置和...

Global site tag (gtag.js) - Google Analytics