前言
Spring提供了几个单元测试的帮助类,能极大地提高编写测试用例的效率,下面剖析一下这几个类的功能。
ConditionalTestCase
扩展TestCase类,重写了runBare方法,在执行每个测试方法前调用isDisabledInThisEnvironment判断是否需要继续执行此测试方法。子类可以重写isDisabledInThisEnvironment方法确定是否需要禁止某些测试方法。
AbstractSpringContextTests
内部使用一个静态的Map缓存ApplicationContext,如果初始化上下文很费时,通过缓存可以极大的提高性能。
通常不需要直接扩展这个类,而是扩展这个类的子类,其子类必须实现loadContext方法负责上下文加载逻辑。
AbstractSingleSpringContextTests
内部保存单个上下文实例。通过重写超类的loadContext方法,从getConfigLocations方法返回的Spring配置文件中加载上下文来实现。除非调用setDirty方法,否则上下文不会进行重加载,这在上下文初始化比较慢时可以显著提升性能,比如使用Hibernate时。
通常情况下子类只需要重写getConfigLocations方法提供需要的配置文件名称,配置文件名称是相对于类路径的。
如果不希望从一个配置文件数组中加载上下文,可以重写contextKey和loadContext方法。
此类将setUp和tearDown方法改写为final的模板方法,在setUp方法里加载上下文,tearDown方法销毁上下文。子类只能通过重写onSetUp和onTearDown方法提供自定义的初始化和销毁逻辑。
AbstractDependencyInjectionSpringContextTests
这是一个依赖上下文的便利超类,测试实例本身是通过依赖注入的。
支持两种模式操纵测试实例,一种是经过设值方式注入,此时是通过类型自动绑定的,另一种是经过字段注入,此时是通过名称自动绑定的,将上下文中的Bean名称和测试实例的保护类型进行绑定。
缺省采用设值方法注入,如果需要采用字段注入,需要在构造函数中设置populateProtectedVariables属性为true。
AbstractTransactionalSpringContextTests
这是一个针对需要在事务环境下执行测试的便利超类,通常会在每个测试完成时执行事务回滚。许多情况下,这是非常有用的,比如:
l 可以在不影响别的测试的情况下在数据库中插入或删除任何数据。
l 为任何要求事务的代码提供事务上下文。
如果数据应该保留在数据库中,需要在测试方法中调用setComplete方法。
可以调用startNewTransaction方法创建一个新的事务,前提是必须先调用endTransaction方法终止旧的事务。
事务行为要求在上下文中有一个实现PlatformTransactionManager接口的Bean实例,这将通过其超类的依赖注入机制自动注入,如果需要使用超类的字段注入机制,那么Bean实例必须命名为transactionManager,这种机制允许上下文配置中存在一个或多个事务管理器实例的情况。
如果没有配置事务管理器,将不会使用事务管理,需要当心的是这可能会造成数据更改,一旦关闭超类的信赖检测将会启动此模式。
此类主要是通过重写AbstractSingleSpringContextTests超类提供的onSetUp和onTearDown方法,在相应的方法中创建和关闭事务来实现的。
AbstractTransactionalDataSourceSpringContextTests
此类给其超类添加了一些针对JDBC操作的便利方法,要求有一个javax.sql.DataSource实例定义在上下文中,此类会暴露一个org.springframework.jdbc.core.JdbcTemplate实例,并提供了一些便利方法,如删除某个表中的数据,计算某个表的行数,执行数据库脚本等。
范例
Springside框架就充分利用spring提供的工具类,简化测试工作量。比如springside提供一个DaoTestCase子类用于Hibernate的测试,该类继承自AbstractTransactionalDataSourceSpringContextTests,只需要重写如下方法:
<o:p></o:p>
<o:p></o:p>
java 代码
- protected String[] getConfigLocations() {
-
- setAutowireMode(AUTOWIRE_BY_NAME);
-
- return new String[]{Constants.DEFAULT_CONTEXT, Constants.DEFAULT_TEST_CONTEXT}; }
以上实现中将源上下文配置及测试上下文配置作为AbstractSingleSpringContextTests
超类的上下文来源,而AbstractDependencyInjectionSpringContextTests提供了自动依赖注入功能,极大简化测试工作量。
分享到:
相关推荐
2. **ApplicationContext**: `spring-test`提供了`@ContextConfiguration`注解,允许你在测试类上声明配置文件的位置,这样就可以在测试环境中加载Spring应用程序上下文。 3. **TestNG集成**: 虽然Junit是默认的...
"spring测试jar"指的是包含这些测试支持的 JAR 文件,通常包括 `spring-test` 和 `junit` 相关的库。 1. **Spring Test**:这是 Spring 框架的一个模块,提供了一组工具和类,帮助开发者编写和运行针对 Spring 应用...
Spring框架提供了一些测试工具,如`WebSocketTestClient`,可以帮助我们进行单元测试和集成测试。 在这个"spring websocket 测试项目"中,开发者可能已经遇到了一些常见问题,例如连接建立失败、消息传输错误或者...
1. **Spring测试模块** Spring框架提供了内置的测试支持,包括`spring-test`模块,它为Spring应用提供了全面的测试工具。这个模块包含了JUnit和Mockito等测试库的整合,使得开发者能够方便地编写针对Spring组件的...
在Spring框架中,单元测试是非常重要的一部分,因为它可以帮助开发者在早期发现和修复问题,提高代码质量。使用JUnit和Hamcrest,我们可以编写针对Spring Bean、AOP切面、数据访问层(如JDBC、Hibernate或MyBatis)...
这些基类会帮助我们加载Spring上下文,并提供测试环境。 在测试类中,我们可以定义一个或多个测试方法,每个方法都使用JUnit的`@Test`注解标记。例如: ```java import org.junit.Test; import org.spring...
例如,使用`@RunWith(SpringRunner.class)`注解启动Spring测试环境,`@SpringBootTest`注解可以加载整个Spring应用上下文,`@MockBean`或`@SpyBean`则可以帮助我们创建模拟对象进行隔离测试。 在“spring 1”这个...
在进行Spring测试时,开发者通常会使用`@RunWith(SpringRunner.class)`来启用Spring的测试支持,然后通过`@SpringBootTest`或更具体的测试注解来指定测试范围。`@Autowired`注解可以帮助注入需要的bean,而`@Mock...
在Spring Boot框架中,单元测试是一项至关重要的任务,它能够帮助开发者确保代码的正确性和可靠性。Spring Boot提供了方便的工具和库,使得编写和执行单元测试变得简单高效。本章节我们将深入探讨Spring Boot中的...
Spring框架是中国IT开发领域中最广泛使用的Java应用框架之一,它为构建高质量的、松耦合的、可测试的Java应用程序提供了全面的解决方案。这个“spring框架帮助文档”旨在为开发者提供详尽的指导,帮助他们克服在使用...
本文将详细探讨一个专为Spring Cloud开发测试设计的工具集,帮助开发者更高效地构建、调试和测试微服务应用。 一、Spring Cloud概述 Spring Cloud是基于Spring Boot实现的一系列微服务解决方案,它提供了服务注册...
在Spring3中,我们可以使用JUnit作为主要的测试框架,结合`@RunWith(SpringJUnit4ClassRunner.class)`注解来启动Spring上下文,使得测试类能够访问到Spring的bean。例如: ```java import org.junit.Test; import ...
本指南旨在帮助开发者更好地理解和使用Spring、Spring Boot框架中的TestNG测试工具。TestNG是一个功能强大的测试框架,它提供了比JUnit更多的功能,如并行测试、测试配置、支持多种测试类型等。 **认识TestNG** ...
1. Spring Test:这是Spring框架自带的测试模块,它提供了`@RunWith(SpringRunner.class)`注解,使得JUnit测试类可以利用Spring的IoC容器来运行。通过`@ContextConfiguration`注解,我们可以指定配置文件的位置,...
Spring测试jar包是针对Spring框架开发的一个重要工具,主要用于帮助开发者在Spring环境下对代码进行单元测试、集成测试以及端到端测试。这个jar包包含了所有必要的类和库,使得测试过程更加便捷和高效。 首先,...
同时,Spring的测试框架为单元测试和集成测试提供了便利,确保代码质量。 总之,"spring中文帮助文档"全面覆盖了Spring 2.0的关键特性和用法,包括但不限于依赖注入、AOP、Spring MVC、JDBC抽象、事务管理以及企业...
这份"Spring3中文帮助文档"正是针对Spring框架的3.1.0版本,提供了详尽的中文解释和指导,旨在帮助开发者更好地理解和使用Spring。 一、依赖注入(DI)容器 DI是Spring的核心特性,它允许开发者在运行时将对象之间...
Spring中文API帮助文档是针对Spring框架的一份详尽指南,旨在帮助中文开发者更便捷地理解和使用Spring的各种功能。 该文档涵盖了Spring框架的多个核心模块,包括: 1. **Spring Core**:这是Spring框架的基础,...
本文将详细探讨"spring测试类"这一主题,基于标题"孔浩组织类型—spring测试类实现2"及提供的描述链接,我们将深入理解如何在Spring中创建和执行测试。 首先,Spring提供了多种测试支持,包括`@RunWith...
9. **测试支持**:Spring Test模块提供了对Spring应用程序的全面测试支持,包括单元测试和集成测试,可以方便地模拟IoC容器,测试Spring配置和组件。 10. **RESTful支持**:Spring 3.0引入了RestTemplate,使得开发...