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测试套件使用了其中大量mock类,这样测试就更加简单。模拟 HttpServletRequest和HttpServletResponse类在Web应用单元测试是很方便的。 如何选择这些发布包,决定选用哪些发布包其实相当简单。如果你正在构建...
spring jar包详细介绍 spring.jar是包含有完整发布的单个jar包,spring....Spring测试套件使用了其中大量mock类,这样测试就更加简单。模拟HttpServletRequest和HttpServletResponse类在Web应用单元测试是很方便的。
Spring测试套件使用了其中大量mock类,这样测试就更加简单。模拟HttpServletRequest和HttpServletResponse类在Web应用单元测试是很方便的。 如何选择这些发布包,决定选用哪些发布包其实相当简单。如果你正在构建...
它包括IoC(Inverse of Control,控制反转)容器、AOP(Aspect-Oriented Programming,面向切面编程)等特性,可以简化开发过程、提高代码的可维护性和可测试性。 2. Spring MVC框架:Spring MVC是基于Spring框架的...
在Spring测试微服务 该存储库包含一个Spring Boot应用程序,该应用程序在不同级别的上具有许多示例性测试。 通过演示不同类型和级别的测试,它展示了一种自以为是的方式来全面测试您的spring应用程序。 您会发现...
基于生产就绪的Maven的Spring Boot入门套件应用程序。 描述 入门套件,用于快速启动基于API的基于Spring的Java服务器的开发。 它包含Spring Boot开发人员在全新开发中应该选择的最佳实践和最新工具。 由于使用了JPA...
使用JUnit和Mockito进行Spring RESTful的完整性和模拟测试 这是一个Spring Boot Maven演示应用程序,展示了如何使用JUnit和Mockito Framework对Sprig Boot RESTful服务执行完整性和模拟测试。 先决条件 Java SE开发...
ctk核心GA4GH服务器的可扩展一致性测试套件建置状态CTK / CTS的构建状态为 默认情况下,此CTK在ctk ctk-schemas模块中使用GA4GH v0.5.1架构的稍作修改的版本; 此嵌入式架构未更新。 您可能想要使用您关心的Schema...
默认情况下现在有rails_helper和spec_helper : spec_helper不加载环境(您可以在不需要整个环境的测试中要求它,以使其运行得更快) rails_helper确实加载环境模型和测试简单模型Foo class Fooend Foo简单测试 ...
Spring in Action,第6版... 这样做的危险在于,注释掉的变体很可能是不正确的-毕竟,它尚未经过编译或未通过测试套件运行。 如果您发现不正常的地方,请告诉我,我会尽力解决。 不应该对...进行测试吗? 我会很容易地
Spring 4 mongoDB连接-入门套件 将文档插入mongo db集合的愚蠢应用程序。 依赖关系经理 Maven的3.2.5 如何建造 $ cd $ mvn clean package 怎么跑 $ cd $ java -jar target/lib/spring-mongodb-0.1.0.jar 运行...
为了测试新的Booster,需要更新Jenkins作业创建Openshift模板扩展测试套件部署增强器并与之交互发出以下命令后,该项目实际上会生成增强器:$ mvn archetype:generate -DarchetypeGroupId=me.snowdrop -...
Spring Boot入门套件指南使开发Spring Boot应用更容易。运维命令# 编译项目mvn compile# 确认项目依赖mvn dependency:tree./gradlew dependenciesmvn dependency:sources dependency:resolve -Dclassifier=javadoc #...
执行Spring Boot应用程序右键单击Spring工具套件/ Eclipse中的项目文件夹。 选择'运行方式'-> Spring Boot App 运行前端的步骤 该项目是通过引导的。 npm install npm start 在开发模式下运行应用程序。 打开在...
ps吉他数据库具有H2 DB的基本Spring JPA应用程序先决条件您将需要以下工具才能使用此... 在SpringSTS套件中,这是通过导入现有的Maven项目来完成的在src / test / java文件夹中运行JUnit测试。 如果一切顺利,您很好。
越来越多的开放源码框架支持在构建项目的同时构建自动测试套件。Springframework、JUnit、TestNG和其他几个框架的一些或全部灵感都来自自动测试的思想。尽管如此,一些非Java语言和框架具有更多的测试动机、更合适的...
该文件使用 7z ( http://www.7-zip.org/ ) ...运行 run_web_solution.m 以根据 Matlab ( http://www.mathworks.com/matlabcentral/fileexchange/27393 ) 提供的测试套件评估所有算法。 注意:有些算法不会终止,需要手
,包含授权服务和开放平台 Docker 镜像,基于 Spring Boot Starter 的资源服务工具包和客户端(第三方应用)工具包 开发工具在软件开发生命周期中扮演着至关重要的角色,它们旨在简化和加速从概念设计到产品部署的...
有效的测试套件包括多种测试策略,这些策略可导致较高的测试覆盖率,从而提高信心。 这些策略通常采用单元,组件,集成和验收测试的形式。 监控和警报。 测试套件需要快速运行,并且可靠。 这还不够强调。 如果测试...