`

Spring测试套件

阅读更多
org.springframework.test包能够提供如下一些功能:
缓存Spring上下文
完成测试类的依赖注入
为测试引入事务管理
提供有助于测试的实例变量

1、上下文管理、缓存
借助于org.springframework.test包,能够完成Spring上下文的装载、缓存工作。注意,缓存Spring上下文非 常有意义。在大型项目中,应用启动的时间很长,因为Spring IoC容器需要实例化大量的对象。这并不是由 Spring本身造成的。比如,某项目存在50-100个Hibernate映射文件,则为装载它们,需要耗费10-20秒左右。 如果每次执行测试用例时都需要重新装载它们,生产率可想而知。 因此,AbstractDependencyInjectionSpringContextTests提供了如下抽象protected方法(用于定位Spring上
下文配置文件),子类必须实现它:
protected abstract String[] getConfigLocations();
开发者需要为它提供Spring配置文件列表。注意,列表是通过classpath路径给定的。这同web.xml或其他部署 配置中使用的Spring配置内容并无(或,基本上不存在)区别。
默认时,Spring上下文一旦装载完成,以后的各个测试用例便能够重用它了。由于Spring上下文的装载过程只 会发生一次,因此测试用例的执行将会很快。 在极端情况下,某测试用例可能会对Spring配置文件(的位置)进行变更。此时,便需要重新装载Spring上下文了。通过调用AbstractDependencyInjectionSpringContextTests提供的setDirty()方法,便能够触发Spring 上下文的重新装载,从而为后续测试用例服务。

2、测试类实例的依赖注入
当AbstractDependencyInjectionSpringContextTests(及其子类)在装载Spring应用上下文时,它们可以通过设值方式注入测试类中的实例变量值。期间,开发者只需要定义相应的实例变量和设值方法。随后,
AbstractDependencyInjectionSpringContextTests便能够自动从Spring配置文件(getConfigLocations())中定位到合适的对象,并注入到测试类中的实例变量。
注意,这里采用了autowire by type。因此,如果为同一类型的POJO定义了多个Spring受管POJO,则要小心了。此时,必须借助于applicationContext实例变量,并显式地使用getBean()方法。
如果开发者不希望设值注入方式作用到测试类,则不需声明任何setter方法。或者,可以直接继承AbstractSpringContextTests。它是org.springframework.test包的最基础类。它仅仅会完成Spring上下文的装载,而并不会去完成依赖注入。

3、事务管理
如果在(开发阶段的)测试过程中需要对RDBMS进行CRUD操作,则RDBMS的状态会发生变动。自然地,这将影响后续测试工作的进行。
请注意,在对RDBMS进行插入或修改数据时,务必使用事务保护它。
Spring提供了org.springframework.test.AbstractTransactionalDataSourceSpringContextTests超类,以应对上述问题。默认时,它会为每个测试用例创建、回滚事务。开发者编写的测试代码将会参与到现有事务中。如果在测试中调用了事务性代理对象,则测试执行过程不会受到
AbstractTransactionalDataSourceSpringContextTests的影响,而会根据事务性代理对象本身的语意执行。
另外,AbstractTransactionalSpringContextTests要求在Spring应用上下文中定义
PlatformTransactionManager受管POJO对象。注意,由于采用了autowire by type,因此这一POJO对象的名字并不重要。
通常,我们会直接继承AbstractTransactionalDataSourceSpringContextTests。此时,还需为它提供DataSource 受管POJO对象。类似地,名字并不重要。期间,它会创建jdbcTemplate实例变量,便于对RDBMS进行CRUD操作。注意,默认时,事务会回滚,因此尽管用它吧!
如果希望事务提交,则可以调用AbstractTransactionalSpringContextTests中的setComplete()方法。此时,事务不会回滚,而会提交!
另外,在测试用例未执行完之前,通过调用endTransaction()方法能够结束事务。默认时,这将触发事务的回滚。当然,如果在这之前调用了setComplete()方法,则会提交事务。这对于如下场合非常有用:测试“不再相连的”数据对象。比如,在Web或远程时,使用到Hibernate中的POJO对象,此时并不存在事务。通常,只有通过UI测试,才能发现延迟装载错误。如果在JUnit测试套件(Suite)中调用endTransaction()方法,则能够确保UI操作的正确性。

4、辅助变量
在继承org.springframework.test包中的基类时,我们可以访问到如下一些protected实例变量:applicationContext(ConfigurableApplicationContext):注意,applicationContext来自于AbstractDependencyInjectionSpringContextTests。通过它,能够显式地完成Spring受管JavaBean(POJO)的查找工作,或者测试Spring上下文的状态。
jdbcTemplate:来自于AbstractTransactionalDataSourceSpringContextTests。使用它,以确认RDBMS的状态。比如,在集成测试之前,使用它查询RDBMS数据;在集成测试之后,使用它能够确认:测试期间应用创建的对象是否成功借助于ORM工具完成了数据的持久化。注意,Spring并没有为jdbcTemplate单独管理事务(它将参与到应用代码的现有事务中)。在集成测试期间,可能需要告知ORM工具去刷新(flush)变更,从而确保(内存和RDBMS)数据的一致性。比如,使用Hibernate Session接口的flush()方法。通常,我们都会为集成测试提供自身开发的、应用级的测试基类,其中会包含不同测试中都会使用到的实例变量。



分享到:
评论

相关推荐

    spring jar 包详解

    - **功能简介**:包含了 Spring 一整套 mock 类来辅助应用的测试,Spring 测试套件使用了其中大量 mock 类,便于测试。 - **应用场景**:适用于项目的单元测试阶段。 - **依赖关系**:依赖于 `spring-core.jar`、`...

    最新最全的spring开发包

    spring jar包详细介绍 spring.jar是包含有完整发布的单个jar包,spring....Spring测试套件使用了其中大量mock类,这样测试就更加简单。模拟HttpServletRequest和HttpServletResponse类在Web应用单元测试是很方便的。

    Spring 2.5 jar 所有开发包及完整文档及项目开发实例

    Spring测试套件使用了其中大量mock类,这样测试就更加简单。模拟HttpServletRequest和HttpServletResponse类在Web应用单元测试是很方便的。  如何选择这些发布包,决定选用哪些发布包其实相当简单。如果你正在构建...

    spring依赖包讲解.doc

    测试方面,EasyMock(easymock.jar和easymockclassextension.jar)是Spring测试套件的一部分,但只在构建和运行测试时需要,不随应用发布。FreeMarker(freemarker.jar)是Spring支持的模板引擎之一,如果你的应用...

    spring测试jar

    "spring测试jar"指的是包含这些测试支持的 JAR 文件,通常包括 `spring-test` 和 `junit` 相关的库。 1. **Spring Test**:这是 Spring 框架的一个模块,提供了一组工具和类,帮助开发者编写和运行针对 Spring 应用...

    Spring、Spring Boot和TestNG测试指南1

    它允许定义测试套件,分组测试,执行异步测试,并提供详细的测试报告。TestNG引入了如注解、XML配置文件、监听器和报告功能,使得测试代码更简洁,可读性更强。 **使用Spring Testing工具** Spring框架提供了全面的...

    Spring框架测试.zip

    此外,还支持断言(Assertion)、测试套件(Test Suites)、参数化测试、定时器(Timers)等特性,增强了测试的灵活性和覆盖率。 Hamcrest Core 1.3 是一个匹配对象的库,它为Java提供了丰富的断言机制。在单元测试...

    spring-dm junit

    在Spring DM和JUnit的测试过程中,Maven可以用来配置构建过程,管理依赖,并执行测试套件。 总结来说,"spring-dm junit"的主题涵盖了在OSGi环境中使用Spring DM开发模块化应用时,如何利用JUnit进行单元测试和确保...

    TestNG-Spring-Example

    2. **配置Spring测试上下文**:创建一个Spring配置文件(如`test-context.xml`),在这个文件中定义测试所需的bean。这些bean可以是模拟的服务、DAO或其他组件,以供测试用例使用。使用`@ContextConfiguration`注解...

    元测单试jnuit spring

    4. **Mock对象与Spy对象**: 在JUnit和Spring测试中,经常使用Mockito等库创建mock对象来模拟依赖,以便测试特定组件的行为。Spy对象则是mock对象的一种变体,允许部分真实行为的执行。 5. **Spring Boot ...

    Spring+JUnit4 +Ant测试报告

    3. **配置Ant**:在Ant的build.xml文件中添加JUnit任务(),指定测试类路径、测试类或测试套件,以及生成测试报告的相关参数。 4. **运行测试**:通过命令行或者IDE运行Ant任务,Ant会执行JUnit测试,并将结果输出...

    在Spring Framework中编写MongoDb集成测试的工具套件(高分项目).zip

    它包括IoC(Inverse of Control,控制反转)容器、AOP(Aspect-Oriented Programming,面向切面编程)等特性,可以简化开发过程、提高代码的可维护性和可测试性。 2. Spring MVC框架:Spring MVC是基于Spring框架的...

    鲲鹏BoostKit Web使能套件 移植指南(Spring Cloud).pdf

    鲲鹏BoostKit Web使能套件移植指南(Spring Cloud) 本文档提供了鲲鹏BoostKit Web使能套件的移植指南,旨在帮助开发者在 Spring Cloud 环境下成功移植鲲鹏BoostKit Web使能套件。该指南主要涵盖了移植鲲鹏BoostKit...

    单元测试案例junit +spring mvc +springboot

    它提供了注解、断言方法和测试套件等特性,使得测试代码简洁易读。例如,`@Test`注解标记测试方法,`assertEquals`用于验证预期结果。JUnit还支持异常测试、参数化测试和定时器等功能,帮助开发者全面验证代码逻辑。...

    testNG集成spring

    例如,可以定义不同的测试套件来控制不同类型的测试执行顺序。 通过上述介绍,我们可以看出Spring和TestNG的集成大大简化了单元测试的过程,使得开发者能够更专注于测试逻辑本身而非繁琐的测试环境搭建。

    spring2.5中文开发手册

    8. Spring测试:提供了用于测试Spring组件的丰富工具和基础设施,例如,mock对象支持、测试套件配置等。 Spring框架之所以流行,是因为它将复杂的企业级应用开发抽象化,提供了许多便利的基础设施,使得开发者能够...

    SPIKE3:Prueba 1 Spring 工具套件 + MongoDB

    SPIKE3: "Prueba 1 Spring 工具套件 + MongoDB" 是一个关于使用Spring工具套件和MongoDB在Java开发中的实践测试项目。这个项目可能涉及到一系列关键的Java技术和框架,特别是Spring Framework和NoSQL数据库MongoDB的...

    spring-framework-4.2.2.RELEASE

    包括模拟(mocking)支持、测试套件和用于验证应用程序行为的实用工具,这些测试工具支持JUnit和TestNG测试框架。 此外,Spring Framework还提供了对各种日志系统的支持,包括Commons Logging、SLF4J和Log4J。通过...

Global site tag (gtag.js) - Google Analytics