.3 Spring应用的单元测试
8.3.1单元测试现在越来越被广泛重视起来,而Spring更是将时下比较流行的Junit开元测试框架进行整合下面我简单的介绍一下在Sping中该如何对代码进行单元测试(本节会认为读者已经具备了Junit基础方面的知识)。按照Spring的推荐,在单元测试时不应该依赖于Spring容器,也就是说不应该在单元测试是启动ApplicationContext并从中获取Bean,相反应该通过模拟对象完成单元测试。而Spring就提供了这样一个类供大家继承。下面来看看示例代码:
1)自动装配的测试用例
代码清单1
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.tony.web.dao.FooDao;
@Service
public class FooService {
@Autowired
private FooDao dao;
public String save(String name){
if(name == null || "".equals(name))
throw new RuntimeException("Name is null");
return dao.save(name);
}
}
import org.springframework.stereotype.Repository;
@Repository
public class FooDao {
public String save(String name){
return "success";
}
}
import org.springframework.test.
AbstractDependencyInjectionSpringContextTests;
import com.tony.web.service.FooService;
public class MyTest extends AbstractDependencyInjectionSpringContextTests{
protected FooService fooService;
//set方法
public void setFooService(FooService fooService) {
this.fooService = fooService;
}
//指定Spring配置文件的位置
protected String[] getConfigLocations(){
return new String[]{"spring-config-beans.xml"};
}
//测试方法
public void testSave(){
String str = this.fooService.save("Tony");
System.out.print(str);
assertEquals("success", str);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://...>
<context:component-scan base-package="com.tony"/>
</beans>
代码清单1中定义了FooService.java和FooDao.java两个Bean已经使用 @Autowired进行了装配,我们的单元测试类MyTest继承了
AbstractDependencyInjectionSpringContextTests类,配置好fooService的set方法并且指定Spring配置文件的位置后,当测试用例运行时我们需要的fooService会自动注入进来,我们只要在testSave方法中直接使用就可以了,还有两外一种写法
代码清单2
public class MyTest extends AbstractDependencyInjectionSpringContextTests{
protected FooService fooService;
public MyTest(){
//启用直接对属性变量进行注入的机制
this.setPopulateProtectedVariables(true);
}
protected String[] getConfigLocations(){
return new String[]{"spring-config-beans.xml"};
}
public void testSave(){
String str = this.fooService.save("Tony");
System.out.print(str);
assertEquals("success", str);
}
}
代码清单2中我们移除了set方法,增加了一个构造函数,在构造函数中调用父类的方法启用直接对属性变量进行注入的机制。有时我们测试的时候会操作数据库插入一条记录,由于我们不会每次都修改测试的数据,当我们再次插入同样的数据时数据库肯定会要报错了,此时我们需要既能测试又能不让测试的数据在数据库中起作用,Spring就知道我们的这个需要,为我们准备了AbstractTransactionalSpringContextTests这个类。
代码清单3
import org.springframework.test.
AbstractTransactionalSpringContextTests;
import com.tony.web.service.FooService;
public class MyTest extends AbstractTransactionalSpringContextTests{
protected FooService fooService;
public MyTest(){
this.setPopulateProtectedVariables(true);
}
protected String[] getConfigLocations(){
return new String[]{"spring-config-beans.xml"};
}
//测试方法中的数据操作将在方法返回前被回滚,不会对数据库产生永久性数据操作,下一//次运行该测试方法时,依旧可以成功运行.
public void testSave(){
String str = this.fooService.save("Tony");
System.out.print(str);
assertEquals("success", str);
}
}
这样就可以在方法返回之前将测试数据回滚,以保证下次单元测试的成功
分享到:
相关推荐
spring单元测试包spring单元测试包spring单元测试包spring单元测试包spring单元测试包
Struts2SpringUnitDemo是一个示例项目,展示了如何在Java应用程序中将Struts2和Spring框架进行集成,并进行单元测试。这两个框架都是Java Web开发中的关键组件,Struts2负责控制层逻辑,Spring则提供了全面的依赖...
在Spring框架中,单元测试是非常重要的一环,因为它可以帮助开发者确保代码的质量和稳定性。Junit是Java中最常用的单元测试框架,它提供了一套简单易用的API来编写和执行测试用例。 在Spring框架中,`spring-test`...
亲测可用, 希望可以帮到大家
Spring单元测试下模拟RabbitMQ的实现 Spring单元测试下模拟RabbitMQ的实现是指在Spring单元测试环境中模拟RabbitMQ的队列和交换机,以便更好地进行单元测试。这种方法可以模拟RabbitMQ的队列和交换机,方便了我们...
在进行Spring单元测试时,我们还需要关注隔离性。为了确保每个测试都是独立的,避免一个测试影响另一个测试的结果,我们可以使用`@DirtiesContext`注解来标记那些可能改变上下文状态的测试方法。此外,`@Before`和`@...
在本文中,我们将深入探讨如何在IntelliJ IDEA(Idea)中建立一个Maven工程,并集成Spring和MyBatis框架,以及如何进行单元测试。这个过程涉及到Java开发中的核心概念,包括依赖管理、配置文件的设置、数据库交互...
Spring单元测试2种写法 在软件开发中,单元测试是一种非常重要的测试方法,它可以确保代码的质量和可靠性。Spring框架作为一个流行的Java Web开发框架,也提供了单元测试的支持。本文将介绍Spring单元测试的2种写法...
在Spring Boot框架中,单元测试是一项至关重要的任务,它能够帮助开发者确保代码的正确性和可靠性。Spring Boot提供了方便的工具和库,使得编写和执行单元测试变得简单高效。本章节我们将深入探讨Spring Boot中的...
Spring MVC 提供了对单元测试的良好支持,使得我们可以方便地测试控制器、服务层以及数据访问层。 在Spring MVC中进行单元测试,我们通常会用到以下关键技术和工具: 1. **JUnit**:JUnit是Java编程语言中最常用的...
在Spring框架中,单元测试和集成测试是软件开发过程中不可或缺的部分。它们确保代码的质量和功能的正确性。本文将深入探讨Spring3中的单元测试和集成测试,并提供相关的实践指导。 ### 单元测试 单元测试是指针对...
在Spring MVC和JPA的开发过程中,单元测试是不可或缺的一部分,它可以帮助我们验证代码的正确性,确保系统各个部分能够按预期工作。本例子聚焦于使用Spring的Test注解进行事务管理的单元测试,这对于数据库操作尤其...
在Spring MVC框架中,单元测试是确保代码质量的重要步骤,特别是在控制器层(Controller)。这篇博客主要探讨了如何使用JUnit进行Spring MVC Controller的单元测试。在实际开发中,单元测试可以帮助我们尽早发现潜在...
【标题】"最简单的含单元测试的spring boot+activiti集成demo" 描述了一种将流行的Spring Boot框架与流程管理工具Activiti结合使用的实践案例。这个集成演示项目旨在帮助开发者快速理解和实现基于Spring Boot的...
Struts2+Spring+Hibernate 中的Action单元测试环境搭建 在软件开发中,单元测试是一种非常重要的测试方法,可以帮助我们确保代码的可靠性和稳定性。在 Struts2+Spring+Hibernate 框架中,对 Action 的单元测试环境...
Spring Boot 单元测试和集成测试实现详解 Springs Boot 是一个基于 Java 的框架,提供了一个便捷的方式来开发基于 Spring 的应用程序。在开发过程中,测试是一个非常重要的步骤,单元测试和集成测试是其中的两种...