`
韩悠悠
  • 浏览: 841807 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Spring下单元测试的要点

阅读更多
Spring下单元测试的要点
关于Spring的单元测试文档详细请看 满江红翻译Spring2.0 参考手册第8章 测试。

1. 需要Spring 依赖注入的测试
   为了测试Spring管理下的Bean,可以自行构造BeanFactory,也可以继承于AbstractDependencyInjectionSpringContextTests,实现public String[] getConfigLocations()函数, 返回applicationContext文件路径的数组。

protected String[] getConfigLocations() {
        return new String[]{"classpath*:spring/*.xml",  "classpath*:spring/test/*.xml"};
}   并显式写一些需要注入的变量的setter函数。

    tips1:此基类有一个applicationContext的成员变量,所以除了依靠setter注入外,还可以随时用applicationContext.getBean(String beanName) 取出所需的bean。

    tips2:注意此基类默认是autowire by type的,所以如果context文件里有两个相同类型的Bean就会报错,可能需要在getConfigLocations()函数里,setAutowireMode(AUTOWIRE_BY_NAME);把它设回by name,或者取消setter函数,自行用applicationContext.getBean()来显式查找Bean。

2. Dao测试
    AbstractTransactionalDataSourceSpringContextTests 继承于AbstractDependencyInjectionSpringContextTests,除了拥有上类的能力外,还管理了每个测试的事务,会Open Session In Test,还会在每个测试后默认回滚所有的操作。

    深此类的实现其实依赖于Application Context中定义的 PlatformTransactionManager。由于使用了Autowrie by type,PlatformTransactionManager可以任意取名。

    另外还依赖于Application Context中定义的DataSource,同样可以任意取名。

    tips1:如果需要在测试后提交,需要setRollBack(false); 或者调用setComplete(); 注意如果没有提交,hibernate这样奸诈的Framework就不会去实际操作数据库,降低了测试的效果。

    tips2:此基类还通过注入的DataSource创建了一个JDBCTemplate 变量,可以跑SQL帮忙核对Hibernate的结果,Spring将确保该查询在同一个事务内执行。为正常工作你需要告诉你的ORM工具'刷新'它的已改变内容,例如使用Hibernate Session 接口的 flush() 方法。

    tips3:除了tips2以外,该类还有countRowsInTable(String tableName),deleteFromTables(String[] names) ,executeSqlScript(String sqlResourcePath, boolean continueOnError)三个简便函数。

3. Controller测试
Controller测试一般要用MockObject 分离Service层,要copy WEB-INF/下的相关文件copy 到classpath,而且Controller不含太多的逻辑,所有测试controller有点吃力不讨好,建议直接用Selenium进行集成测试,见(Selenium测试概述)。

4.SpringSide里的测试
因为Spring默认的基类名字较长,SpringSide 在core 的org.springside.core.test 中重新继承了它们,并提供了默认读取所有按springside 文件存放规则存放的context 文件的getConfigLocations()函数。

默认读取所有context文件的getConfigLocations()函数对速度和测试的隔离化都有影响,可以在子类重新实现。不过自己重新一个个写相关context文件也好烦,而且其实在全lazy-load的情况下,速度也还可以接受。如何取舍要自己平衡了。

对于CRUD的测试,在helloworld示例里的变量名都作了泛化,可以快速copy到另一个测试里。

另外,留意resources/spring/test 下的文件,利用了Spring的PropertyOverrideConfigurer,新设定测试时的ApplicatonContext 里各个Bean的属性如指定测试用的DataSource,详细用法见Spring配置要点。
分享到:
评论

相关推荐

    Spring Boot开发教程的主要步骤和要点

    Spring Boot提供了强大的测试支持,包括单元测试、集成测试。使用@SpringBootTest注解可以启动整个应用进行集成测试。 **步骤八:打包与部署** 完成开发后,可以使用Maven或Gradle打包成可执行的jar文件,然后在...

    spring+framework+2.5+开发参考手册

    3. **改进的测试支持**:增强了Spring TestContext框架,以更好地支持单元测试和集成测试。 4. **优化的性能**:对内部组件进行了重构,提高了性能和可扩展性。 5. **新的Web模块**:添加了新的Web模块,如Spring ...

    spring框架\Spring 中文开发手册

    Spring框架还提供了强大的集成测试支持,包括Mockito、Junit、TestNG等工具的集成,使得开发者能够在单元测试和集成测试中轻松模拟复杂的依赖关系,确保代码的质量和稳定性。 ### 安全性 Spring Security是Spring...

    Struts2+Spring+Hibernate+Ehcache+AJAX+JQuery+Oracle 框架集成用户登录注册Demo工程

    7.Spring+Junit4单元测试,优点:不会破坏数据库现场,等等。 2)Demo 导入说明: 1.Eclipse Encoding:GBK 2.Eclipse 导入后可能需要在 Xml Catalog 手动添加:ehcache-spring-1.2.xsd(ehcache-spring-annotations...

    org.springframework.web.struts-3.1.0.M2.jar

    2. **依赖注入(DI)**:Spring框架的核心特性之一就是依赖注入,它可以将Struts中的Action类实例化和管理交由Spring负责,这样可以实现Action类的解耦,并方便进行单元测试。 3. **AOP(面向切面编程)**:Spring...

    Spring+Jotm+Hibernate+Oracle+Junit 实现JTA分布式事务要求Demo工程

    3.Spring+Junit4单元测试,优点:不会破坏数据库现场,等等。 (特别注意:Spring3.0里不在提供对jotm的封装,spring-tx里没有JotmFactoryBean.class,我在jar里添加了类) 2)Demo 导入说明: 1.Eclipse ...

    Spring框架入门教程

    ### Spring框架入门教程知识点详解 #### 一、Spring框架基础知识 ...通过上述步骤,不仅可以完成Spring框架的基础搭建,还可以理解Spring框架的核心概念和技术要点。这对于初学者来说是一个很好的实践起点。

    Spring3.X编程技术与应用.(丁振凡)

    4. **测试驱动开发(TDD)**:Spring框架内置了大量的测试支持工具,可以帮助开发者更容易地进行单元测试和集成测试,从而提高代码质量和维护性。 5. **集成第三方系统**:Spring框架提供了丰富的扩展点,可以方便...

    跟我学spring系列 蒋开涛

    - **单元测试**:针对单个类或方法的功能进行测试,确保每个部分按预期工作。 - **集成测试**:测试系统各个组成部分之间的交互,验证集成后的整体行为是否正确。 ### 六、其他知识点 #### 1.27 IoC/DI理解 - **...

    JAVAspring入门需要注意什么?

    - 学习Spring的测试支持,包括单元测试、集成测试,以及Mockito、JUnit等工具的使用。 8. **Spring Batch**: - 对于批量处理需求,Spring Batch提供了一套完整的解决方案,可以用于创建可扩展且健壮的批处理应用...

    spring帮助文档

    - **测试**:提供了单元测试和集成测试的支持。 #### 1.3 使用方案 Spring框架支持多种使用方案和技术栈组合,可以根据项目需求灵活选择。例如,可以使用Spring Boot快速搭建应用,也可以选择Spring Cloud进行...

    spring2.0-中文参考手册.pdf

    - **单元测试**:Spring 2.0提供了强大的单元测试支持,可以方便地创建独立于应用程序上下文的单元测试。 - **集成测试**:Spring 2.0还支持集成测试,可以在真实的环境中测试整个应用程序的运行情况。 - **工具支持...

    spring in action

    这些工具可以帮助开发者更轻松地编写高质量的单元测试和集成测试。 ### 结论 《Spring in Action》第四版是一本非常全面且实用的Spring框架指南,它不仅涵盖了Spring框架的基础知识,还深入探讨了许多高级主题。...

    实用SPRING

    - **测试支持**:Spring提供了一套全面的测试工具,支持单元测试和集成测试,帮助开发者编写高质量的代码。 #### 四、本书特色及内容概述 《实用Spring》这本书是由Arnaud Cogoluègnes、Thierry Templier、Julien...

    spring boot创建钉钉后端服务核心要点.doc

    随着项目的进展,你可以添加更多的功能,如错误处理、安全性设置、日志记录、单元测试等,以提高应用程序的质量和稳定性。同时,针对钉钉的具体需求,如消息推送、用户管理等,可以进一步扩展后端服务的功能。

    Spring Boot

    3. **测试**:Spring Boot提供了易于使用的测试工具,如`@SpringBootTest`注解等,方便进行单元测试和集成测试。 4. **国际化**:通过资源文件管理多语言支持。 5. **异常处理**:利用全局异常处理器统一处理各种...

    SPRING面试宝典

    - **测试模块**:提供了对Spring组件进行单元测试的支持。 - **其他模块**:如AOP、消息传递等高级功能模块。 **1.4 解释核心容器(Application context)模块** 核心容器是Spring框架的核心,它提供了依赖注入的...

    Spring Boot 系列教程 JDBC

    在测试中,Spring Boot可以自动配置内存数据库(如H2),方便进行单元测试。 以上是Spring Boot集成JDBC的基础知识要点,通过这个系列教程,你可以深入了解Spring Boot如何简化数据库操作,并熟练运用到实际项目中...

Global site tag (gtag.js) - Google Analytics