`
江南白衣
  • 浏览: 550024 次
  • 来自: 广州
社区版块
存档分类
最新评论

幼学琼林--Spring下单元测试要点

阅读更多
今天复习了一下 造福无数人Spring2.0 参考手册翻译--第8章 测试,浓缩即精华的更新了SS wiki中的--Spring下的单元测试要点


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() 取出所需的bean。

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

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

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

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

tips1:如果需要在测试后提交,需要setRollBack(false); 或者调用setComplete()

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文件存放规则,默认读取所有context 文件的getConfigLocations()函数。

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

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

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

phpcode有点排版不便,大家可以看wiki原文

分享到:
评论
4 楼 dhxyu 2007-07-02  
不错!

中国JavaEE技术交流社区-欢迎您的参与探讨!
-- 打造“原创JavaEE技术心得帖”社区,注意:原创哦!欢迎朋友们的踊跃参与写帖!
http://www.j2eedve.com/
3 楼 小贾 2006-10-29  
不错!
2 楼 stamen 2006-10-29  
正在学习你的Springside,收获良多啊,谢谢了。
1 楼 daquan198163 2006-10-22  
自从有了你。。。。。。。。

相关推荐

    spring-framework-2.5-rc2-with-dependencies\spring-framework-2.5-rc2\spring-framework-2.5-rc2docs

    除此之外,Spring 2.5还强化了测试支持,包括模拟对象(Mock Objects)和单元测试框架的集成,使得测试过程更加便捷。这有助于开发者构建高质量、健壮的应用程序。 总之,Spring Framework 2.5 RC2是Java开发中不可...

    spring3学习笔记(2)-集成ibatis3进行单元测试

    在本篇“Spring3学习笔记(2)-集成ibatis3进行单元测试”中,我们将深入探讨如何在Spring3框架中整合Ibatis3,并利用它来进行单元测试。这个主题对于理解如何在实际项目中实现数据访问层的测试具有重要意义。在现代...

    Spring3单元测试和集成测试

    @ContextConfiguration(locations = {"classpath:spring-context.xml"}) @Test public void testMyMethod() { // 进行方法测试 myService.myMethod(); // 验证结果 } } ``` 在上述例子中,`@...

    ch01-hello-spring1.rar

    8. **单元测试**:如何利用Spring提供的TestContext框架进行单元测试,验证Bean的行为。 9. **运行和调试**:如何启动应用,查看控制台输出,以及如何使用断点进行调试。 10. **源码阅读**:对于压缩包中的代码,...

    spring mvc的简单单元测试

    <artifactId>spring-boot-starter-test <scope>test <!-- JUnit --> <groupId>junit <artifactId>junit <scope>test <!-- Mockito --> <groupId>org.mockito <artifactId>mockito-core <scope>...

    spring单元测试包

    spring单元测试包spring单元测试包spring单元测试包spring单元测试包spring单元测试包

    logback-ext-spring.jar

    本文将详细介绍如何在Spring框架中使用Logback来替代Log4j,并提供编译后的`logback-ext-spring-0.1.2-SNAPSHOT.jar`包供参考。 1. **Logback简介** Logback是由Ceki Gülcü(Log4j的创始人)创建的日志框架,...

    Embedded-database-spring-test:一个库,用于为Spring集成测试创建隔离的嵌入式数据库

    产品特点支持Spring和Spring Boot框架支持的版本是Spring 4.3.0+和Spring Boot 1.4.0+ 与Spring TestContext框架自动集成完全支持上下文缓存与Flyway数据库迁移工具无缝集成只需将@FlywayTest批注放置在测试类或方法...

    spring整合单元测试Junit开发包

    3. **TestNG集成**: 虽然Junit是默认的测试框架,但`spring-test`也支持TestNG,一个功能更丰富的测试框架,提供了更多高级特性,如并行测试执行。 4. **Web应用程序测试**: Spring Test模块包含`MockMvc`类,用于...

    详解spring cloud如何使用spring-test进行单元测试

    Spring Cloud 中的单元测试 在软件开发中,单元测试是一个非常重要的步骤,它可以帮助开发者确保代码的正确性和稳定性。Spring Cloud 作为一款流行的微服务框架,也提供了对单元测试的支持。本文将介绍如何使用 ...

    spring mvc jpa单元测试例子

    @ContextConfiguration(locations = {"classpath:spring-context.xml"}) public class UserServiceTest { @Autowired private UserService userService; @Autowired private UserRepository userRepository; ...

    尚硅谷-佟刚-spring使用的spring-framework-4.0.0.RELEASE

    《尚硅谷-佟刚-spring使用的spring-framework-4.0.0.RELEASE》是一个关于Spring框架的教程资源,其中特别关注了Spring与Hibernate的整合。在这个版本中,Spring Framework 4.0.0.RELEASE提供了对Hibernate的支持,...

    Spring-test做数据库操作的单元测试2-跨库访问

    在Spring框架中,Spring-test模块提供了强大的支持来进行单元测试和集成测试。这篇博客"Spring-test做数据库操作的单元测试2-跨库访问"探讨了如何利用Spring-test进行数据库操作的测试,尤其是涉及到跨库访问的场景...

    logback-ext-spring

    spring使用logback的扩展,使用起来非常方便。在web.xml中配置: <context-param> <param-name>logbackConfigLocation</param-name> <param-value>/WEB-INF/conf/logback.xml</param-value> </context-param> ...

    spring-mybatis-spring-2.1.0.zip

    通过以上介绍,我们可以看到,"spring-mybatis-spring-2.1.0.zip"这个资源包为开发者提供了一套完整的Spring与MyBatis整合解决方案,无论是新手还是经验丰富的开发者,都可以快速上手,构建高效的企业级应用。...

    spring.jar spring-agent.jar spring-aop.jar spring-beans.jar spring-hibernate3.jar spring-jdbc.jar spring-struts.jar spring-web.jar

    spring.jar spring-aop.jar spring-aop.jar spring-beans.jar spring-hibernate3.jar spring-jdbc.jar spring-struts.jar spring-web.jar

    spring-framework-2.0.7-with-dependencies\spring-framework-2.0.7\spring-framework-2.0.7案例

    在"spring-framework-2.0.7案例"中,可能包含了一些演示如何使用Spring 2.0.7进行开发的实际项目或教程。这些示例可能涵盖了以下主题: 1. **IoC容器的使用**:展示了如何创建Bean定义,以及如何通过XML或注解方式...

    Struts2SpringUnitDemo单元测试

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

    gz-tony-spring-authority-master

    《gz-tony-spring-authority-master》项目是一个关于Spring权限管理的开源项目,它整合了Spring框架的相关技术,用于实现高效、安全的权限控制。在这个项目中,开发者Tony可能为了整理个人电脑上的资源,将其公开...

    spring+Junit4单元测试

    通过Spring集成单元测试,以后测试service层内容时,就不用getBean()来获得Service层对象了

Global site tag (gtag.js) - Google Analytics