`

再讨论spring的单元测试

阅读更多
在我以前一篇文章关于spring的文章中仔细讨论过spring单元测试策略,根据最近一些经验。今天再写一点自己的经验:

1.需要把单元测试时不需要的东西拿掉,比如缓存,安全等,这就需要怎么仔细考虑spring的applicationContext.xml功能。

2.DAO与Service的测试需要使用不同的策略,一般来讲,DAO单元测试只测试一个DAO类,而service需要多个DAO来支撑,有时还需要别的service支持。因此需要为DAO与service分别定义两个基类。DAO一般不需要使用事务,因此DAO测试基类继承AbstractDependencyInjectionSpringContextTests;而service需要,Service测试基类继承AbstractTransactionalDataSourceSpringContextTests

3.那怎么简化开发人员编写单元测试类呢?若每次都需要写很多,那他们自然不愿意写,所以架构师应该简化单元测试的编程模型上下功夫。一个原则:每个人只添加自己想要的,必要时可以覆盖全部的配置文件,完全自己来写,下面是我写的两个测试基类的demo


DAO测试基类
public abstract class AbstractDAOTestCase extends
        AbstractDependencyInjectionSpringContextTests {

    public AbstractDAOTestCase() {
        this.setAutowireMode(AUTOWIRE_BY_NAME);
    }

    @Override
    protected String[] getConfigLocations() {
        String[] baseConfigs = new String[] { "/spring/applicationContext.xml" };
        String[] extentConfigs = getExtentConfigs();
        int length = baseConfigs.length + extentConfigs.length;

        String[] allConfigs = new String[length];

        for (int i = 0; i < baseConfigs.length; i++) {
            allConfigs[i] = baseConfigs[i];
        }

        for (int i = 0; i < extentConfigs.length; i++) {
            allConfigs[i + baseConfigs.length] = extentConfigs[i];
        }

        return allConfigs;
    }

    //开发人员可以覆盖这个方法,添加自己的配置文件
    protected String[] getExtentConfigs() {
        return new String[] {};
    }

}

Service测试基类
public abstract class AbstractServiceTestCase extends
        AbstractTransactionalDataSourceSpringContextTests {

    protected UserDAO userDAO;

    public AbstractServiceTestCase() {
        this.setAutowireMode(AUTOWIRE_BY_NAME);
    }

    @Override
    protected String[] getConfigLocations() {
        String[] baseConfigs = new String[] { "spring/applicationContext.xml",
                "spring/applicationContext-transaction.xml",
                "org/codehaus/xfire/spring/xfire.xml",
                "spring/applicationContext-xfire.xml",
                "spring/applicationContext-osworkflow.xml",
                "spring/platform/*.xml" };
        String[] extentConfigs = getExtentConfigs();
        int length = baseConfigs.length + extentConfigs.length;

        String[] allConfigs = new String[length];

        for (int i = 0; i < baseConfigs.length; i++) {
            allConfigs[i] = baseConfigs[i];
        }

        for (int i = 0; i < extentConfigs.length; i++) {
            allConfigs[i + baseConfigs.length] = extentConfigs[i];
        }

        return allConfigs;
    }

    //开发人员可以覆盖这个方法
    protected String[] getExtentConfigs() {
        return new String[] {};
    }

    public void setUserDAO(UserDAO userDAO) {
        this.userDAO = userDAO;
    }
}
分享到:
评论

相关推荐

    springboot 的junittest 单元测试的例子

    在Spring Boot项目中,JUnit测试是开发者进行单元测试的常用工具。JUnit是一个流行的Java编程语言的单元测试框架,它使得测试代码的编写变得简洁而高效。这篇博客文章(虽然描述为空,但可以从标题和标签推测内容)...

    spring-demo15-测试.zip

    本示例“spring-demo15-测试”主要聚焦于Spring框架中的测试部分,通过一系列的实例,深入探讨如何有效地进行Spring应用的单元测试和集成测试。 1. **Spring测试模块** Spring框架提供了内置的测试支持,包括`...

    我的笔记 spring的测试

    接着,我们讨论Spring的集成测试。集成测试是验证系统组件之间交互的重要环节。Spring Boot提供了一个方便的`@SpringBootTest`注解,可以启动一个完整的Spring应用上下文来进行测试。通过`@WebMvcTest`或`@...

    spring4+JUnit简单测试

    总的来说,Spring4提供了丰富的测试支持,结合JUnit能够实现从单元测试到集成测试的全面覆盖。这不仅提高了代码质量,也加速了问题定位和修复的过程。在实际开发中,应充分利用这些工具,确保软件的健壮性和稳定性。...

    Spring 单元测试项目:含 JUnit 和 Mockito 使用示例及相关测试知识.zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,...

    SpringTest_springtest_spring_java_Framework_

    "SpringTest_springtest_spring_java_Framework_"这个标题暗示了我们讨论的是关于Spring框架的测试方面,可能是使用Spring进行单元测试或集成测试的一些实践。 描述中的“简单小应用,实现了一些基本的功能”可能是...

    元测单试jnuit spring

    【标题】:“元测单试jnuit spring”可能是指使用JUnit和Spring框架进行的单元测试。这通常涉及到Java开发中的测试驱动开发(TDD)和集成测试实践。 【描述】:描述中的重复部分“元测单试jnuit spring”似乎是一种...

    Spring 3.0就这么简单源代码

    本书主要介绍了Spring 3.0的核心内容,不仅讲解了Spring 3.0的基础知识,还深入讨论了Spring IoC容器、Spring AOP、使用Spring JDBC访问数据库、集成Hibernate、Spring的事务管理、Spring MVC、单元测试、敏捷开发...

    spring-Hibernate整合代码测试过程

    7. **测试**:在代码测试过程中,我们需要编写单元测试和集成测试。Spring提供了TestNG或JUnit支持,结合Mockito等工具,可以模拟数据源和业务对象,进行无数据库环境下的测试。对于集成测试,可以直接运行应用程序...

    spring第二次课测试

    7. **单元测试和集成测试**:在Spring框架中,我们可以使用JUnit和Mockito进行单元测试,使用Spring Test和Spring Boot Test进行集成测试。我们将讨论如何编写测试用例,以及如何利用测试驱动开发(TDD)来提高代码...

    spring 与 spring mvc 整合 配置讨论

    10. **测试**:Spring提供了JUnit支持,可以方便地对Service和Controller进行单元测试,确保代码质量。 以上就是Spring与Spring MVC整合配置的一些基础知识,实际应用中还需要考虑安全性、性能优化等因素。通过不断...

    spring junit

    描述中的链接指向了一篇名为“Spring 2.5+Junit4的单元测试”的博客文章,虽然具体内容未给出,但可以推断这篇文章可能讲述了如何在Spring 2.5版本中集成Junit4进行单元测试的实践和技巧。 标签“源码”意味着我们...

    spring-boot-test-1.5.8.RELEASE.zip_spring_spring boot_springboot

    总的来说,Spring Boot测试模块提供了丰富的测试支持,包括集成测试、端到端测试和单元测试,帮助开发者确保他们的Spring Boot应用程序在不同层次上都运行正常。1.5.8.RELEASE版本可能不是最新的,但它仍然是一个...

    testing-si-gateways:单元测试 Spring 集成网关

    标题 "testing-si-gateways" 提到的是一个与单元测试和Spring集成网关相关的项目。这表明我们将探讨如何在Spring框架中对服务网关进行单元测试,特别是使用Spring Integration。Spring Integration是Spring生态系统...

    prospring-pdf

    此外,书中还将涵盖Spring的测试支持,包括单元测试和集成测试,帮助开发者确保代码质量。Spring提供的TestContext框架简化了测试环境的配置,使得测试用例能够轻松地注入依赖和模拟协作对象。 《Pro Spring PDF》...

    spring技术内幕第2版深入解析spring架构与设计原理

    在Spring的设计中,还特别注意到了可测试性,设计了丰富的Mock对象和测试工具,极大地方便了单元测试和集成测试,这在现代软件开发中显得尤为重要。 此外,Spring的生态系统非常丰富,与众多其他的开源项目都有良好...

    Spring的小项目

    接下来,我们讨论Spring的IoC(Inversion of Control,控制反转)容器。IoC容器是Spring框架的心脏,负责管理对象的生命周期和对象间的依赖关系。当一个类被声明为Spring容器的bean时,IoC容器会负责创建、初始化、...

    Learning Spring Boot 2.0 Second Edition

    测试是保证软件质量的重要环节,书里会涵盖Spring Boot的单元测试和集成测试,使用Mockito和WireMock进行模拟测试,以及如何进行性能和压力测试。 最后,本书还会讲解Spring Boot的应用部署,包括本地开发环境的...

    spring4.2.0官方文档

    7. **测试**:讲解如何使用Spring进行单元测试和集成测试,包括Mock对象、测试注解和测试上下文框架。 8. **工具**:介绍Spring工具集,如Spring Tool Suite,这些工具能提高开发效率并简化项目配置。 9. **模块**...

    学习struts1 spring 测试

    对于测试,JUnit是单元测试的首选工具,你可以编写测试用例来验证Action或Service层的方法是否正确工作。对于集成测试,可以使用Struts1提供的Mock对象或者Spring的Mockito库,模拟HTTP请求和依赖,确保整个流程的...

Global site tag (gtag.js) - Google Analytics