转自:
在做spring相关测试时比较麻烦,如果只用JUnit测试,需要没测有初始化一下applicationContext,效率比较底下,而且也有不足之处。具体见下文
- 导致多次Spring容器初始化问题
根据JUnit测试方法的调用流程,每执行一个测试方法都会创建一个测试用例的实例并调用setUp()方法。由于一般情况下,我们在setUp()方法 中初始化Spring容器,这意 味着如果测试用例有多少个测试方法,Spring容器就会被重复初始化多次。虽然初始化Spring容器的速度并不会太 慢,但由于可能会在Spring容器初始化时执行加载Hibernate 映射文件等耗时的操作,如果每执行一个测试方法都必须重复初始化Spring容 器,则对测试性能的影响是不容忽视的;
使用Spring测试套件,Spring容器只会初始化一次!
2. 需要使用硬编码方式手工获取Bean
在测试用例类中我们需要通过ctx.getBean()方法从Spirng容器中获取需要测试的目标Bean,并且还要进行强制类型转换的造型操作。这种乏味的操作迷漫在测试用例的 代码中,让人觉得烦琐不堪;
使用Spring测试套件,测试用例类中的属性会被自动填充Spring容器的对应Bean,无须在手工设置Bean!
3. 数据库现场容易遭受破坏
测试方法对数据库的更改操作会持久化到数据库中。虽然是针对开发数据库进行操作,但如果数据操作的影响是持久的,可能会影响到后面的测试行为。举个例子, 用户在 测试方法中插入一条ID为1的User记录,第一次运行不会有问题,第二次运行时,就会因为主键冲突而导致测试用例失败。所以应该既能够完成功能逻 辑检查,又能够在测试 完成后恢复现场,不会留下“后遗症”;
使用Spring测试套件,Spring会在你验证后,自动回滚对数据库的操作,保证数据库的现场不被破坏,因此重复测试不会发生问题!
4. 不方便对数据操作正确性进行检查
假如我们向登录日志表插入了一条成功登录日志,可是我们却没有对t_login_log表中是否确实添加了一条记录进行检查。一般情况下,我们可能是打开 数据库,肉眼观察 是否插入了相应的记录,但这严重违背了自动测试的原则。试想在测试包括成千上万个数据操作行为的程序时,如何用肉眼进行检查?
只要你继承Spring的测试套件的用例类,你就可以通过jdbcTemplate在同一事务中访问数据库,查询数据的变化,验证操作的正确性!
下面笔者给大家介绍具体实现过程(基于maven项目):
在maven的pom.xml中加入以下配置,其他spring相关配置省略。
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>4.2.5.RELEASE</version> </dependency>
定义一个测试基类:
import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class)//表示整合JUnit4进行测试 @ContextConfiguration(locations={"classpath:spring-config.xml"})//加载spring配置文件 public class BaseJunit4Test { }
编写具体的测试类,继承刚刚的测试基类:
import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import com.gk.spring.redis.daoImpl.UserDao; import com.gk.spring.redis.entity.User; public class SpringRedisTest extends BaseJunit4Test { @Autowired private UserDao userDao; @Test public void test01() { User user = new User(); user.setId("1"); user.setName("qq"); userDao.add(user); User user2 = userDao.get("1"); System.out.println(user2.getName()); } }
最后,按照自己的测试要求进行测试即可。
相关推荐
Spring框架由多个模块组成,如Core Container(核心容器)、Data Access/Integration(数据访问/集成)、Web、AOP(面向切面编程)、Test等。每个模块都有相应的jar包,例如`spring-context.jar`提供了上下文支持,`...
2. **Web应用**:"spring-boot-sample-web"展示了如何构建RESTful API和Web应用,利用Spring MVC和Thymeleaf模板引擎,以及如何配置安全控制如Spring Security。 3. **数据访问**:"spring-boot-sample-data-jpa"和...
6. **测试框架升级**:Spring Test和Spring Boot Test模块得到了改进,提供了更强大的测试工具和更易用的API,便于编写单元测试和集成测试。 7. **错误处理和异常处理**:错误页面和异常处理机制进行了优化,可以更...
文档文件是理解任何框架的关键,Spring4.3的文档可能包含官方参考文档、API文档和教程。官方参考文档详细解释了框架的每个部分,包括如何配置、如何使用各种特性,以及最佳实践。API文档,如Javadoc,提供了类、接口...
本教程聚焦于Spring Boot 2.4版本,针对初学者提供一个完整的RESTful CRUD(创建、读取、更新、删除)操作实例,结合尚硅谷B站教程进行讲解。对于已经熟悉Spring Boot 1.5的老手来说,这个教程可能会揭示2.4版本的...
`spring-test-examples`这个项目就是针对Spring框架的测试用例集合,旨在帮助开发者理解和掌握如何在实际项目中进行有效的测试。这里我们将深入探讨Spring测试的核心知识点,包括Spring Test、Spring Boot测试、...
Spring Test模块在5.3.2中包含了更多测试工具和API,使得单元测试和集成测试更加简单高效。支持模拟对象、Web测试客户端和针对Spring Boot应用的测试支持,有助于确保代码质量。 8. **模块化设计** Spring ...
《尚硅谷-佟刚-spring使用的spring-framework-4.0.0.RELEASE》是一个关于Spring框架的教程资源,其中特别关注了Spring与Hibernate的整合。在这个版本中,Spring Framework 4.0.0.RELEASE提供了对Hibernate的支持,...
对于测试,Spring Boot也提供了spring-boot-starter-test启动器,该启动器集成了JUnit、Hamcrest和Mockito等库,便于开发者编写测试用例。 Spring Boot的起步依赖遵循一个命名规则,即spring-boot-starter-加上应用...
* 在IDEA中创建一个新的Maven项目,例如springboot-test 3. 配置pom.xml * 添加java版本配置:<properties> <java.version>1.8</java.version></properties> * 添加依赖管理:<dependencyManagement>... * 添加...
2. Spring Boot的核心功能 Spring Boot是基于Spring框架的,它通过特定的方式进一步简化了基于Spring的应用开发。Spring Boot的核心功能体现在以下几个方面: - 自动配置:Spring Boot能够根据项目中添加的jar依赖...
6. **测试框架**:Spring Test模块和Spring Boot Test Suite提供了全面的测试支持,包括单元测试、集成测试和端到端测试。5.3.0可能引入了新的测试工具和改进的测试API,以帮助开发者编写更健壮的测试。 7. **...
### Sharding-JDBC 教程:Spring Boot 整合 Sharding-JDBC 实现读写分离 #### 一、Sharding-JDBC 和 Spring Boot 的简介 **Sharding-JDBC** 是阿里巴巴开源的一个轻量级 Java 框架,主要用于对数据库进行分片、...
- **文档和教程**:文档的改进和新教程的增加代表了Spring社区对知识分享的重视,有助于开发者学习和使用Spring。 - **Spring与Java EE标准的整合**:Spring支持了Java EE 6的特性,体现了Spring与Java EE标准之间...
此外,Spring 社区还提供了大量的教程、文档和示例,帮助开发者更好地理解和使用这个强大的框架。无论是初学者还是经验丰富的开发者,Spring Framework 都能提供一套完整的解决方案,助力构建高质量的企业级应用。
在"spring-framework-2.0.7案例"中,可能包含了一些演示如何使用Spring 2.0.7进行开发的实际项目或教程。这些示例可能涵盖了以下主题: 1. **IoC容器的使用**:展示了如何创建Bean定义,以及如何通过XML或注解方式...
Spring Boot提供了测试工具和注解,如`@SpringBootTest`、`@WebMvcTest`等,方便进行单元测试和集成测试。 10. **Spring Data**: Spring Boot与Spring Data的整合,简化了数据访问,包括JPA、MongoDB、Couchbase...
6. **社区支持**:Spring拥有庞大的开发者社区,提供了丰富的教程、示例代码和插件,使得学习和使用Spring变得更加容易。 总的来说,"Spring5.0下载官网下载包"为开发者提供了构建高效、灵活和可扩展的Java应用所需...
《Spring Boot中文开发指南》是一本专为中文开发者编写的实战型教程,旨在帮助读者深入理解和熟练运用Spring Boot这一强大的Java开发框架。Spring Boot简化了Spring应用的初始搭建以及开发过程,通过“约定优于配置...
实际上,这只是Spring Batch文档的教程实现,但我想在此基础上进行扩展以作为演讲的基础。 通过Spring Boot实现。 指示 要生成可执行jar,只需使用maven执行程序包目标即可: mvn clean package 要运行批处理的...