`

再讨论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;
    }
}
分享到:
评论

相关推荐

    Spring 3.0就这么简单源代码

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

    spring-tdd-example:Spring TDD示例

    使用Spring Boot从上到下TDD的示例资料... Sannidhi Jalukar, Software Engineer, PivotalMadhura Bhave, Software Engineer, Pivotal时间线: 整合测试控制器单元测试控制器创建服务单元测试异常处理程序的创建储存

    外卖网站源码java-spring-boot-grpc-benchmarking:一起试验gRPC和SpringBoot的示例项目

    比较是在某些条件下进行的,我们在下面的基准测试部分更详细地讨论了这些条件。 因为这个实验是在我的本地机器上进行的,我接受它只是展示了它们相对于彼此的表现。 :memo: 我学到的是? :pencil: gRPC 和 REST 之间...

    java三大框架

    使用Spring构建的应用程序易于单元测试。 Spring能使EJB的使用成为一个实现选择,而不是应用架构的必然选择。你能选择用POJOs或local EJBs来实现业务接口,却不会影响调用代码。 Spring帮助你解决许多问题而无需...

    最新SpringBoot项目原创歌曲分享平台.zip

    - 在开发完成后进行了功能测试、单元测试和性能测试,以确保平台的稳定性和可靠性。 - 根据市场调研和咨询研究结果,不断调整和完善功能模块以满足用户需求。 综上所述,这个基于Spring Boot的原创歌曲分享平台不仅...

    Grails权威指南

     1.7 单元测试  1.8 本章小结 第2章 groovy动态语言  2.1 groovy和java的异同  2.1.1 相同点  2.1.2 不同点  2.2 基础知识  2.1.1 类声明 . 2.2.2 语言级断言(assertion)  ...

    领域驱动设计与模式实战

    6.4.5 分离单元测试和数据库调用测试 6.5 查询 6.5.1 单组查询对象 6.5.2 单组查询对象的代价 6.5.3 将查询定位到哪里 6.5.4 再次将聚合作为工具 6.5.5 将规格用于查询 6.5.6 其他查询选择 6.6 小结 第7章 应用规则...

    毕业设计订餐系统源码-columbus-2018-summer:哥伦布-2018-夏季

    单元测试/TDD (Junit)* 就业服务: 集合概述 (*Iterables/Iterators) 列表 地图 就业服务: 在班上: 作业:复习 依赖注入/Spring 测试双打 (Mockito)* 继承与多态 封装 使用 Gradle* 构建自动化 就业服务: 春天 ...

    java8集合源码-bookmarks:在线有趣内容的书签集合

    用于架构的单元测试工具,非常值得一看。 - 在 git 控制下获取您的 Jenkins 配置。 关于一个人在一家小公司成长中的转型经历的文章系列: 这是来自 Visual Studio Team Service 团队对基于 x 的开发的调查结果的博客...

    ISE521FINALPRJ_HTA

    该readme.me降价文件中介绍的工作,再加上对“的讨论,是作者在Rhode Island大学进行的ISE / PSY:521人力系统工程课程的最终项目报告(2020年Spring)。 讨论了HTA文献的背景简介,重点介绍了HTA与人机系统,软件...

    iBATIS实战

    13.1.3 对DAO的消费层进行单元测试 235 13.2 管理iBATIS配置文件 237 13.2.1 将其保存在类路径上 237 13.2.2 集中放置文件 238 13.2.3 主要按返回类型来组织映射文件 239 13.3 命名规范 239 13.3.1 语句的命名 239 ...

    asp.net知识库

    技术基础 New Folder 多样式星期名字转换 [Design, C#] .NET关于string转换的一个小Bug Regular Expressions 完整的在.net后台执行javascript脚本集合 ASP.NET 中的正则表达式 常用的匹配正则表达式和实例 ...

Global site tag (gtag.js) - Google Analytics