`
jinxhj2003
  • 浏览: 148464 次
  • 性别: Icon_minigender_1
  • 来自: 南昌
社区版块
存档分类
最新评论

spring单元测试

阅读更多
.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单元测试包spring单元测试包

    Struts2SpringUnitDemo单元测试

    Struts2SpringUnitDemo是一个示例项目,展示了如何在Java应用程序中将Struts2和Spring框架进行集成,并进行单元测试。这两个框架都是Java Web开发中的关键组件,Struts2负责控制层逻辑,Spring则提供了全面的依赖...

    spring整合单元测试Junit开发包

    在Spring框架中,单元测试是非常重要的一环,因为它可以帮助开发者确保代码的质量和稳定性。Junit是Java中最常用的单元测试框架,它提供了一套简单易用的API来编写和执行测试用例。 在Spring框架中,`spring-test`...

    spring单元测试(含jar包和样例代码)

    亲测可用, 希望可以帮到大家

    spring单元测试下模拟rabbitmq的实现

    Spring单元测试下模拟RabbitMQ的实现 Spring单元测试下模拟RabbitMQ的实现是指在Spring单元测试环境中模拟RabbitMQ的队列和交换机,以便更好地进行单元测试。这种方法可以模拟RabbitMQ的队列和交换机,方便了我们...

    基于Spring的JUnit单元测试

    在进行Spring单元测试时,我们还需要关注隔离性。为了确保每个测试都是独立的,避免一个测试影响另一个测试的结果,我们可以使用`@DirtiesContext`注解来标记那些可能改变上下文状态的测试方法。此外,`@Before`和`@...

    (Idea)Spring+MyBatis配置及单元测试

    在本文中,我们将深入探讨如何在IntelliJ IDEA(Idea)中建立一个Maven工程,并集成Spring和MyBatis框架,以及如何进行单元测试。这个过程涉及到Java开发中的核心概念,包括依赖管理、配置文件的设置、数据库交互...

    Spring_单元测试_2种写法

    Spring单元测试2种写法 在软件开发中,单元测试是一种非常重要的测试方法,它可以确保代码的质量和可靠性。Spring框架作为一个流行的Java Web开发框架,也提供了单元测试的支持。本文将介绍Spring单元测试的2种写法...

    07. Spring Boot单元测试

    在Spring Boot框架中,单元测试是一项至关重要的任务,它能够帮助开发者确保代码的正确性和可靠性。Spring Boot提供了方便的工具和库,使得编写和执行单元测试变得简单高效。本章节我们将深入探讨Spring Boot中的...

    spring mvc的简单单元测试

    Spring MVC 提供了对单元测试的良好支持,使得我们可以方便地测试控制器、服务层以及数据访问层。 在Spring MVC中进行单元测试,我们通常会用到以下关键技术和工具: 1. **JUnit**:JUnit是Java编程语言中最常用的...

    Spring3单元测试和集成测试

    在Spring框架中,单元测试和集成测试是软件开发过程中不可或缺的部分。它们确保代码的质量和功能的正确性。本文将深入探讨Spring3中的单元测试和集成测试,并提供相关的实践指导。 ### 单元测试 单元测试是指针对...

    spring mvc jpa单元测试例子

    在Spring MVC和JPA的开发过程中,单元测试是不可或缺的一部分,它可以帮助我们验证代码的正确性,确保系统各个部分能够按预期工作。本例子聚焦于使用Spring的Test注解进行事务管理的单元测试,这对于数据库操作尤其...

    spring MVC junit 单元测试(controller)

    在Spring MVC框架中,单元测试是确保代码质量的重要步骤,特别是在控制器层(Controller)。这篇博客主要探讨了如何使用JUnit进行Spring MVC Controller的单元测试。在实际开发中,单元测试可以帮助我们尽早发现潜在...

    最简单的含单元测试的spring boot+activiti集成demo

    【标题】"最简单的含单元测试的spring boot+activiti集成demo" 描述了一种将流行的Spring Boot框架与流程管理工具Activiti结合使用的实践案例。这个集成演示项目旨在帮助开发者快速理解和实现基于Spring Boot的...

    Struts2+Spring+hibernate中对action的单元测试环境搭建[总结].pdf

    Struts2+Spring+Hibernate 中的Action单元测试环境搭建 在软件开发中,单元测试是一种非常重要的测试方法,可以帮助我们确保代码的可靠性和稳定性。在 Struts2+Spring+Hibernate 框架中,对 Action 的单元测试环境...

    Spring Boot 单元测试和集成测试实现详解

    Spring Boot 单元测试和集成测试实现详解 Springs Boot 是一个基于 Java 的框架,提供了一个便捷的方式来开发基于 Spring 的应用程序。在开发过程中,测试是一个非常重要的步骤,单元测试和集成测试是其中的两种...

Global site tag (gtag.js) - Google Analytics