`
流浪鱼
  • 浏览: 1682773 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

spring测试框架

 
阅读更多

使用 Spring 2.5 TestContext 测试框架
简介: Spring 2.5 TestContext 测试框架用于测试基于 Spring 的程序,TestContext 测试框架和低版本 Spring 测试框架没有任何关系,是一个全新的基于注解的测试框架,为 Spring 推荐使用该测试框架。
概述
Spring 2.5 相比于 Spring 2.0 所新增的最重要的功能可以归结为以下 3 点:
基于注解的 IoC 功能;
基于注解驱动的 Spring MVC 功能;
基于注解的 TestContext 测试框架。
Spring 推荐开发者使用新的基于注解的 TestContext 测试框架,本文我们将对此进行详细的讲述。
低版本的 Spring 所提供的 Spring 测试框架构在 JUnit 3.8 基础上扩展而来,它提供了若干个测试基类。而 Spring 2.5 所新增的基于注解的 TestContext 测试框架和低版本的测试框架没有任何关系。它采用全新的注解技术可以让 POJO 成为 Spring 的测试用例,除了拥有旧测试框架所有功能外,TestContext 还添加了一些新的功能,TestContext 可以运行在 JUnit 3.8、JUnit 4.4、TestNG 等测试框架下。
直接使用 JUnit 测试 Spring 程序存在的不足
在拙作《精通 Spring 2.x — 企业应用开发详解》一书中,笔者曾经指出如果直接使用 JUnit 测试基于 Spring 的程序,将存在以下 4 点明显的不足:
导致 Spring 容器多次初始化问题:根据 JUnit 测试用例的调用流程,每执行一个测试方法都会重新创建一个测试用例实例并调用其 setUp() 方法。由于在一般情况下,我们都在 setUp() 方法中初始化 Spring 容器,这意味着测试用例中有多少个测试方法,Spring 容器就会被重复初始化多少次。
需要使用硬编码方式手工获取 Bean:在测试用例中,我们需要通过 ApplicationContext.getBean() 的方法从 Spirng 容器中获取需要测试的目标 Bean,并且还要进行造型操作。
数据库现场容易遭受破坏:测试方法可能会对数据库记录进行更改操作,破坏数据库现场。虽然是针对开发数据库进行测试工作的,但如果数据操作的影响是持久的,将会形成积累效应并影响到测试用例的再次执行。举个例子,假设在某个测试方法中往数据库插入一条 ID 为 1 的 t_user 记录,第一次运行不会有问题,第二次运行时,就会因为主键冲突而导致测试用例执行失败。所以测试用例应该既能够完成测试固件业务功能正确性的检查,又能够容易地在测试完成后恢复现场,做到踏雪无迹、雁过无痕。
不容易在同一事务下访问数据库以检验业务操作的正确性:当测试固件操作数据库时,为了检测数据操作的正确性,需要通过一种方便途径在测试方法相同的事务环境下访问数据库,以检查测试固件数据操作的执行效果。如果直接使用 JUnit 进行测试,我们很难完成这项操作。
Spring 测试框架是专门为测试基于 Spring 框架应用程序而设计的,它能够让测试用例非常方便地和 Spring 框架结合起来,以上所有问题都将迎刃而解。
编写 UserService 的测试用例
下面我们为 UserService 编写一个简单的测试用例类,此时的目标是让这个基于 TestContext 测试框架的测试类运行起来,我们将在后面逐步完善这个测试用例。

清单3.TestUserService.java: 基于注解的测试用例
    
package com.baobaotao.service;

import org.springframework.test.context.junit4.
    AbstractTransactionalJUnit4SpringContextTests;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.beans.factory.annotation.Autowired;
import org.junit.Test;
import com.baobaotao.domain.User;

import java.util.Date;

@ContextConfiguration  //①
public class TestUserService extends
    AbstractTransactionalJUnit4SpringContextTests {
  
@Autowired  //②
   private UserService userService;

   @Test  //③
   public void handleUserLogin(){
       User user = new User();
       user.setUserId(1);
       user.setLastIp("127.0.0.1");
       Date now = new Date();
       user.setLastVisit(now.getTime());
       userService.handleUserLogin(user);
   }
}

这里,我们让 TestUserService 直接继承于 Spring 所提供的 AbstractTransactionalJUnit4SpringContextTests 的抽象测试类,稍后本文将对这个抽象测试类进行剖析,这里你仅须知道该抽象测试类的作用是让 TestContext 测试框架可以在 JUnit 4.4 测试框架基础上运行起来就可以了。
在 ① 处,标注了一个类级的 @ContextConfiguration 注解,这里 Spring 将按 TestContext 契约查找 classpath:/com/baobaotao/service/TestUserService-context.xml 的 Spring 配置文件,并使用该配置文件启动 Spring 容器。@ContextConfiguration 注解有以下两个常用的属性:
locations:可以通过该属性手工指定 Spring 配置文件所在的位置,可以指定一个或多个 Spring 配置文件。如下所示:
@ContextConfiguration(locations={“xx/yy/beans1.xml”,” xx/yy/beans2.xml”})
inheritLocations:是否要继承父测试用例类中的 Spring 配置文件,默认为 true。如下面的例子:
@ContextConfiguration(locations={"base-context.xml"})
 public class BaseTest {
     // ...
 }
 @ContextConfiguration(locations={"extended-context.xml"})
 public class ExtendedTest extends BaseTest {
     // ...
 }

如果 inheritLocations 设置为 false,则 ExtendedTest 仅会使用 extended-context.xml 配置文件,否则将使用 base-context.xml 和 extended-context.xml 这两个配置文件。
② 处的 @Autowired 注解让 Spring 容器自动注入 UserService 类型的 Bean。而在 ③ 处标注的 @Test 注解则让 handleUserLogin() 方法成为一个 JUnit 4.4 标准的测试方法, @Test 是 JUnit 4.4 所定义的注解。
在运行 TestUserService 测试类之前,让我们先看一下 TestUserService-context.xml 配置文件的内容:

分享到:
评论

相关推荐

    Spring测试框架.rar

    Spring测试框架是Spring生态系统中的重要组成部分,它为开发者提供了对Spring应用进行单元测试、集成测试以及端到端测试的强大支持。这个压缩包“Spring测试框架.rar”包含了与使用Spring 2.5 TestContext测试框架...

    Spring+hibernate 单元测试

    Spring 2.5 版本引入了一个全新的基于注解的测试框架——TestContext,该框架与之前的测试框架相比有着显著的区别。TestContext 测试框架不再依赖于特定的测试基类,而是采用了更加灵活的注解方式来定义测试行为,这...

    spring-mock.jar

    spring测试框架

    Spring框架开发参考中文手册

    《Spring框架开发参考中文手册》是一本专门为Java开发者设计的指南,旨在帮助他们深入理解和熟练运用Spring框架进行软件开发。Spring作为Java企业级应用开发的主流框架,以其强大的功能、灵活的设计和广泛的社区支持...

    spring junit

    Spring测试框架支持使用`@MockBean`和`@SpyBean`来创建模拟对象,这在隔离测试和避免数据库交互时非常有用。`@MockBean`创建完全模拟的对象,而`@SpyBean`则允许部分模拟,可以监控真实对象的行为。 4. **事务管理...

    Spring.NET框架参考文档

    Spring.NET框架是一个面向.NET平台的企业级应用程序开发框架,它借鉴了Java界的Spring框架,并将其核心概念和功能移植到了.NET环境中。这个框架的主要目标是简化.NET应用程序的开发,提高可测试性和可维护性,同时...

    使用 Spring 2.5 TestContext 测试框架

    在Spring框架中,TestContext模块为开发者提供了强大的测试支持,特别是在Spring 2.5版本中,这个测试框架进一步增强了测试的便利性和可扩展性。它允许我们以声明式的方式配置和管理测试环境,包括bean的初始化、...

    spring框架帮助文档

    另外,Spring框架还提供了强大的测试支持,包括单元测试和集成测试框架,使得开发者能够在不同层次上对应用程序进行测试,确保代码质量。 Spring的文件“spring.chm”很可能包含了所有这些特性的详细说明,包括API...

    Spring框架参考手册

    - 对测试框架进行了增强,提高了测试效率。 #### 四、Spring框架4.1的新特性和增强 - **4.1 JMS改进** - 增强了Java消息服务(JMS)支持。 - **4.2 缓存改进** - 改进了缓存管理功能,增加了更多缓存策略和API...

    android的spring框架

    Spring for Android是Spring.io针对Android平台推出的一个框架,旨在帮助开发者构建高质量、可测试和模块化的应用程序。下面将详细介绍Spring框架在Android中的应用和相关知识点。 1. **依赖注入(DI)** Spring框架...

    Spring Professional Certification Study Guide

    8. **测试**:讲解Spring测试框架,包括单元测试、集成测试和Mockito的使用。 9. **安全**:讨论Spring Security,包括身份验证、授权、CSRF保护和OAuth2集成。 10. **Spring Cloud**:如果涉及,可能会涵盖Spring...

    spring mvc + spring + hibernate 全注解整合开发视频教程 12

    6. 使用Spring测试框架进行单元测试和集成测试。 通过学习本教程,你将能够熟练地运用这三大框架进行全注解的整合开发,从而提高开发效率,打造出高质量的Java Web应用。无论你是初学者还是有经验的开发者,这个...

    spring4框架系列[ 2 ]

    Spring 框架是 Java 开发中的一个核心组件,它为构建可维护、松耦合的应用程序提供了强大的支持。在 "spring4框架系列[ 2 ]" 的代码笔记中,我们将深入探讨 Spring 4.x 版本的关键特性,以及如何在实际项目中应用...

    spring框架外文文献.docx

    5. **测试**:Spring提供了测试框架支持,包括模拟对象、测试上下文框架和对单元测试和集成测试的工具,以简化应用的测试工作。 6. **工具**:Spring工具集支持IDE集成,提供了一种更高效的方式来开发Spring应用...

    Spring框架基础压缩包

    在"Spring_Project_1"这个压缩包中,可能包含了Spring框架的基础示例项目,包括配置文件、源代码、测试用例等,可以帮助初学者理解并实践Spring的基本用法和特性。通过学习和研究这些内容,你可以深入掌握Spring框架...

    Spring整合Junit框架进行单元测试Demo

    Spring是一个开源的、全面的企业级应用框架,它简化了开发复杂应用的过程,而JUnit则是一个流行的单元测试框架,用于确保代码的质量和可靠性。当我们需要对Spring框架中的组件进行单元测试时,通常会将JUnit与Spring...

Global site tag (gtag.js) - Google Analytics