单元测试整合spring-test实践

简介: 本文主要是对Junit简介,以及结合说spring-test完善Junit不足,以及使用需要注意的问题。

单元测试在我们的软件开发整个流程中占有举足轻重的地位,我们可以通过编写单元测试来提高开发的效率、验证程序的有效性,并且减少程序的bug。每一样东西都有两面性,有优点也有缺点,先来说说Junit的优点。
1、提供API以便创建可重复的带有清晰的通过/不通过的结果的单元测试;
2、方便的组织、运行测试和展示结果;
3、可以把多个测试分组打包,成批处理;
4、添加,删除,屏蔽测试方法,不影响其他的测试方法;
5、减少重复工作,提高开发效率。
Junit提供一系列的方法、注解,方便我们进行单元测试的同时,也可以很直观地观察到测试结果。
@Test(expected=...)注解:

此注释标签的含义是,这是一个测试,期待一个异常的发生,期待的异常通过 xxx.class 标识,这个注解可以很方便地验证方法所产生的异常,如果产生期待的异常,则测试通过,否则测试失败;

@Test(timeout=...)注解:

可以给测试方法指定超时时间(毫秒级别),当测试方法的执行时间超过此值,则失败。
eg:
@Test
@Ignore
@Repeat(5)
public void testInsertException() {
    service.insertIfNotExist(null);
}

不可否认,在实际应用中,Junit还是有一些不足之处,有以下几点:
1、每次运行,都需要加载所需要的配置;
2、对数据库的操作无法进行回滚;
3、需要添加获取bean实例的代码,也就是无法自动注入。
另外,JUnit是不支持多线程代码的测试的,主线程运行完之后就结束整个测试了。如果想要实现多线程执行,需要继承Runner类,自己实现一个运行环境类。
接下来说说spring-test,spring-test的功能比较强大,可以与Junit完美集成,可以弥补刚刚说到的几个Junit的缺点。Spring 与 Junit 的集成也比较简单,只需在pom.xml中添加以下配置即可。

<dependency>                                  
  <groupId>org.springframework</groupId>    
  <artifactId>spring-test</artifactId>       
  <scope>test</scope>                       
</dependency>

如果应用中已经使用到Junit,那么在与spring-test集成的时候。原先的方法和注解都不需要改变,只需要在类的声明处,通过@Run With (Spring JUnit4 Class Runner.class)来启动 Spring 对测试类的支持,通过@Context Configuration注释标签来指定 Spring 配置文件或者配置类的位置,再使用@Transactional 用来启用自动的事务管理即可。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations ={"file\:D:/xxx/xxx/src/main/webapp/WEB-INF/applicationContext.xml"})
@Transactional
public abstract class AbstractTestCase extends TestCase{ 
  ……
}  

spring-test还支持配置文件的缓存,使用@Dirties Context注解进行配置,缺省情况下,Spring 测试框架一旦加载applicationContext后,将一直缓存,不会改变。但由于Spring允许在运行期修改 applicationContext的定义。例如在运行期获取 applicationContext,然后调用registerSingleton方法来动态的注册新的bean。这样的情况下如果我们还使用Spring测试框架的被修改过applicationContext,则会带来测试问题,我们必须能够在运行期重新加载 applicationContext。这个时候,我们可以在测试类或者方法上注释: @Dirties Context,作用如下:

如果定义在类上(缺省),则在此测试类运行完成后,重新加载 applicationContext
如果定义在方法上,即表示测试方法运行完成后,重新加载 applicationContext。

最后,再说说使用Junit给我们带来的好处:
1、junit+spring-test整合单元测试,无需启动容器,测试更加便捷。
2、通过单元测试,由简及繁,降低复杂项目集成风险。
3、调整代码,通过已有测试用例,快速检查结果,降低测试城。

相关文章
|
2月前
|
数据采集 监控 机器人
浅谈网页端IM技术及相关测试方法实践(包括WebSocket性能测试)
最开始转转的客服系统体系如IM、工单以及机器人等都是使用第三方的产品。但第三方产品对于转转的业务,以及客服的效率等都产生了诸多限制,所以我们决定自研替换第三方系统。下面主要分享一下网页端IM技术及相关测试方法,我们先从了解IM系统和WebSocket开始。
64 4
|
2月前
|
人工智能 JavaScript 前端开发
自动化测试框架的演进与实践###
本文深入探讨了自动化测试框架从诞生至今的发展历程,重点分析了当前主流框架的优势与局限性,并结合实际案例,阐述了如何根据项目需求选择合适的自动化测试策略。文章还展望了未来自动化测试领域的技术趋势,为读者提供了宝贵的实践经验和前瞻性思考。 ###
|
29天前
|
搜索推荐 NoSQL Java
微服务架构设计与实践:用Spring Cloud实现抖音的推荐系统
本文基于Spring Cloud实现了一个简化的抖音推荐系统,涵盖用户行为管理、视频资源管理、个性化推荐和实时数据处理四大核心功能。通过Eureka进行服务注册与发现,使用Feign实现服务间调用,并借助Redis缓存用户画像,Kafka传递用户行为数据。文章详细介绍了项目搭建、服务创建及配置过程,包括用户服务、视频服务、推荐服务和数据处理服务的开发步骤。最后,通过业务测试验证了系统的功能,并引入Resilience4j实现服务降级,确保系统在部分服务故障时仍能正常运行。此示例旨在帮助读者理解微服务架构的设计思路与实践方法。
81 16
|
1月前
|
人工智能 自然语言处理 Java
Spring Cloud Alibaba AI 入门与实践
本文将介绍 Spring Cloud Alibaba AI 的基本概念、主要特性和功能,并演示如何完成一个在线聊天和在线画图的 AI 应用。
288 7
|
2月前
|
XML Java 数据格式
🌱 深入Spring的心脏:Bean配置的艺术与实践 🌟
本文深入探讨了Spring框架中Bean配置的奥秘,从基本概念到XML配置文件的使用,再到静态工厂方式实例化Bean的详细步骤,通过实际代码示例帮助读者更好地理解和应用Spring的Bean配置。希望对你的Spring开发之旅有所助益。
137 3
|
2月前
|
XML Java 数据格式
Spring Core核心类库的功能与应用实践分析
【12月更文挑战第1天】大家好,今天我们来聊聊Spring Core这个强大的核心类库。Spring Core作为Spring框架的基础,提供了控制反转(IOC)和依赖注入(DI)等核心功能,以及企业级功能,如JNDI和定时任务等。通过本文,我们将从概述、功能点、背景、业务点、底层原理等多个方面深入剖析Spring Core,并通过多个Java示例展示其应用实践,同时指出对应实践的优缺点。
71 14
|
2月前
|
缓存 Java 数据库连接
Spring框架中的事件机制:深入理解与实践
Spring框架是一个广泛使用的Java企业级应用框架,提供了依赖注入、面向切面编程(AOP)、事务管理、Web应用程序开发等一系列功能。在Spring框架中,事件机制是一种重要的通信方式,它允许不同组件之间进行松耦合的通信,提高了应用程序的可维护性和可扩展性。本文将深入探讨Spring框架中的事件机制,包括不同类型的事件、底层原理、应用实践以及优缺点。
83 8
|
2月前
|
测试技术 Python
探索软件测试的深度与广度:从理论到实践
在数字化时代,软件已成为我们生活中不可或缺的一部分。随着技术的不断进步和用户需求的多样化,确保软件质量变得尤为重要。本文将深入浅出地介绍软件测试的核心概念、类型及其在软件开发生命周期中的重要性。我们将通过实际案例,展示如何实施有效的测试策略,并探讨自动化测试的未来趋势,旨在为读者提供一套完整的软件测试知识体系,帮助提升软件质量和开发效率。
|
2月前
|
测试技术 Python
探索软件测试的奥秘:从理论到实践
在软件开发的宇宙中,软件测试犹如一颗璀璨的星辰,指引着质量的方向。本文将带你穿梭于软件测试的理论与实践之间,揭示其内在的逻辑和魅力。从测试的重要性出发,我们将探讨不同类型的测试方法,并通过实际案例分析,深入理解测试用例的设计和应用。最后,我们将通过一个代码示例,展示如何将理论知识转化为实际操作,确保软件质量的同时,也提升你的测试技能。让我们一起踏上这段探索之旅,发现软件测试的无限可能。
|
2月前
|
jenkins 测试技术 持续交付
自动化测试框架的搭建与实践
在软件开发领域,自动化测试是提升开发效率、确保软件质量的关键手段。本文将引导读者理解自动化测试的重要性,并介绍如何搭建一个基本的自动化测试框架。通过具体示例和步骤,我们将探索如何有效实施自动化测试策略,以实现软件开发流程的优化。
100 7