`

Spring-Test教程2

阅读更多

转自:

在做spring相关测试时比较麻烦,如果只用JUnit测试,需要没测有初始化一下applicationContext,效率比较底下,而且也有不足之处。具体见下文

  1. 导致多次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-5.3.9-dist.zip(spring-framework-5.3.9)

    Spring框架由多个模块组成,如Core Container(核心容器)、Data Access/Integration(数据访问/集成)、Web、AOP(面向切面编程)、Test等。每个模块都有相应的jar包,例如`spring-context.jar`提供了上下文支持,`...

    spring-boot-samples-master

    2. **Web应用**:"spring-boot-sample-web"展示了如何构建RESTful API和Web应用,利用Spring MVC和Thymeleaf模板引擎,以及如何配置安全控制如Spring Security。 3. **数据访问**:"spring-boot-sample-data-jpa"和...

    Spring4.3完整官网下载的完整包

    文档文件是理解任何框架的关键,Spring4.3的文档可能包含官方参考文档、API文档和教程。官方参考文档详细解释了框架的每个部分,包括如何配置、如何使用各种特性,以及最佳实践。API文档,如Javadoc,提供了类、接口...

    spring-boot-04-web-restfulcrud

    本教程聚焦于Spring Boot 2.4版本,针对初学者提供一个完整的RESTful CRUD(创建、读取、更新、删除)操作实例,结合尚硅谷B站教程进行讲解。对于已经熟悉Spring Boot 1.5的老手来说,这个教程可能会揭示2.4版本的...

    spring-test-examples:这是包含我在Spring教程中测试的示例的存储库

    `spring-test-examples`这个项目就是针对Spring框架的测试用例集合,旨在帮助开发者理解和掌握如何在实际项目中进行有效的测试。这里我们将深入探讨Spring测试的核心知识点,包括Spring Test、Spring Boot测试、...

    spring-batch-test

    实际上,这只是Spring Batch文档的教程实现,但我想在此基础上进行扩展以作为演讲的基础。 通过Spring Boot实现。 指示 要生成可执行jar,只需使用maven执行程序包目标即可: mvn clean package 要运行批处理的...

    尚硅谷-佟刚-spring使用的spring-framework-4.0.0.RELEASE

    《尚硅谷-佟刚-spring使用的spring-framework-4.0.0.RELEASE》是一个关于Spring框架的教程资源,其中特别关注了Spring与Hibernate的整合。在这个版本中,Spring Framework 4.0.0.RELEASE提供了对Hibernate的支持,...

    无涯教程(LearnFk)-Spring-Boot教程完整离线版.pdf

    对于测试,Spring Boot也提供了spring-boot-starter-test启动器,该启动器集成了JUnit、Hamcrest和Mockito等库,便于开发者编写测试用例。 Spring Boot的起步依赖遵循一个命名规则,即spring-boot-starter-加上应用...

    Spring-Boot框架初步搭建

    * 在IDEA中创建一个新的Maven项目,例如springboot-test 3. 配置pom.xml * 添加java版本配置:&lt;properties&gt; &lt;java.version&gt;1.8&lt;/java.version&gt;&lt;/properties&gt; * 添加依赖管理:&lt;dependencyManagement&gt;... * 添加...

    无涯教程网-Spring-Boot电子教程.pdf

    2. Spring Boot的核心功能 Spring Boot是基于Spring框架的,它通过特定的方式进一步简化了基于Spring的应用开发。Spring Boot的核心功能体现在以下几个方面: - 自动配置:Spring Boot能够根据项目中添加的jar依赖...

    官方原版完整包 spring-framework-5.3.0.RELEASE.zip

    6. **测试框架**:Spring Test模块和Spring Boot Test Suite提供了全面的测试支持,包括单元测试、集成测试和端到端测试。5.3.0可能引入了新的测试工具和改进的测试API,以帮助开发者编写更健壮的测试。 7. **...

    Sharding-JDBC教程:Spring Boot整合Sharding-JDBC实现读写分离.docx

    ### Sharding-JDBC 教程:Spring Boot 整合 Sharding-JDBC 实现读写分离 #### 一、Sharding-JDBC 和 Spring Boot 的简介 **Sharding-JDBC** 是阿里巴巴开源的一个轻量级 Java 框架,主要用于对数据库进行分片、...

    spring-framework-reference

    - **文档和教程**:文档的改进和新教程的增加代表了Spring社区对知识分享的重视,有助于开发者学习和使用Spring。 - **Spring与Java EE标准的整合**:Spring支持了Java EE 6的特性,体现了Spring与Java EE标准之间...

    spring-framework-5.0.8.RELEASE-dist

    此外,Spring 社区还提供了大量的教程、文档和示例,帮助开发者更好地理解和使用这个强大的框架。无论是初学者还是经验丰富的开发者,Spring Framework 都能提供一套完整的解决方案,助力构建高质量的企业级应用。

    spring-framework-2.0.7-with-dependencies\spring-framework-2.0.7\spring-framework-2.0.7案例

    在"spring-framework-2.0.7案例"中,可能包含了一些演示如何使用Spring 2.0.7进行开发的实际项目或教程。这些示例可能涵盖了以下主题: 1. **IoC容器的使用**:展示了如何创建Bean定义,以及如何通过XML或注解方式...

    spring-boot-reference-guide-zh.pdf

    Spring Boot提供了测试工具和注解,如`@SpringBootTest`、`@WebMvcTest`等,方便进行单元测试和集成测试。 10. **Spring Data**: Spring Boot与Spring Data的整合,简化了数据访问,包括JPA、MongoDB、Couchbase...

    spring-boot中文开发指南

    《Spring Boot中文开发指南》是一本专为中文开发者编写的实战型教程,旨在帮助读者深入理解和熟练运用Spring Boot这一强大的Java开发框架。Spring Boot简化了Spring应用的初始搭建以及开发过程,通过“约定优于配置...

    spring-framework-4.2.3.RELEASE

    - Spring提供了强大的测试工具集,包括Spring Test和Spring Boot Test,4.2.3版本在测试框架上做了增强,使得单元测试和集成测试更加便捷。 7. **模块化设计** - Spring Framework由多个模块组成,如Core ...

    spring-boot-中文PDF版

    《Spring Boot中文参考指南》是一本全面且深入的教程,无论你是初学者还是经验丰富的开发者,都能从中获取到宝贵的实战经验和深入理解。通过学习,你将能够熟练地运用Spring Boot来构建高效、可维护的现代Java应用。

    spring-framework-4.0.0.RELEASE

    Spring有着强大的社区支持,丰富的官方文档和第三方教程,使得开发者能够快速上手并解决问题。 总的来说,Spring框架4.0.0.RELEASE是一个全面的、成熟的Java开发解决方案,通过其灵活的模块化设计、强大的功能集和...

Global site tag (gtag.js) - Google Analytics