Dashboard > SpringSide3 Wiki > ... > Practice Guide > Testing
  SpringSide3 Wiki Log In | Sign Up   View a printable version of the current page.  
  Testing
Added by Calvin, last edited by Calvin on 2008-10-16  (view change)
Labels: 
(None)

1. 资料

2. 选型

2.1 JUnit 3.8 vs JUnit 4.5

       JUnit 4.0打破了原来的继承体系,纯以annotation标注。但觉得其实像JUnit 3.8那样约定大于配置也没什么不好的,大家按命名规则也没什么不好,也不用去import static xxx.Assert.* 了。而且Spring也为Junit 3提供了JUnit4作为重要特性的@IfProfileValue(符合条件才运行),@ExpectedException(期望异常),@Timed(超时控制)。

       所以最后还是坚持JUnit 3.8,并关注JUnit 4.x 以后会不会有突飞猛进的发展。

2.2 EasyMock vs JMock

       经过比较觉得其实EasyMock要好用一些。

2.3 其他

  • Web Service集成测试工具,SoapUI挺好用的,特别是Pro版的试用版,可以与不会编码的测试人员共用同一个工具。
  • Web集成测试工具,Selenium
  • 测试代码覆盖率工具,国内现状,普通项目的测试用例暂时还没奢侈到能检查覆盖率的地步。
  • 压力测试工具,貌似客户一般只认LoadRunner的结果,其他的开源工具结果都不怎么招人待见。

3. in  SpringSide 3.0

    测试用例分三类:

    一类是单元测试,使用JUnit 3.8+ EasyMock,Mock掉所有依赖类,严格隔绝其他类对本类的影响。

    二类是集成测试,使用JUnit 3.8+ Spring的TestContext Framework,注入其他依赖Bean,使用实际数据库进行测试。

    三类是功能测试,依照测试用例文档,使用SoapUI,Selenium这些外部工具或者纯手工进行测试。

    上述三类测试,对问题的定位越来越笼统,但对产品最后质量的测试效率则越来越高。在国内现状中,大力提倡TDD的同时,还不可能严格要求大家必须编写足够的测试用例,愿意写测试的同志已经是好同志了。  

3.1 功能测试

       测试组的同事作为最后防线,必须编写完整的测试用例文档,覆盖大部分的正常或异常情况,并用SoapUI,Selenium 或手工进行严格的测试。

       如果开发组与测试组能共享SoapUI,Selenium工件,那就是最高效的。

       在mini-service示例的src/test/soapUI 目录中附带了SoapUI的项目文件。  

3.2 集成测试

       集成测试会依赖其他的依赖类,不能单独测试。但优点是不用写太多的Mock语句,也能测试几个类集成起来的效果,所以测试效率也会比较高。

       Spring 2.5的依赖测试用例支持ApplicationContext依赖注入,事务自动回滚等功能,而且Spring 2.5提供了新的TestContext Framework 详见Spring 2.5 集成测试资料

       因为Spring的类名一贯清晰但超长,所以抽取了SpringTestCase 和 SpringTranscationTestCase两个基类,都默认载入了/applicationContext.xml。
       在子类定义更多的applicationContext-*.xml文件时,SpringTestCase基类类定义的applicationContext.xml 会被默认继承。

       SpringTranscationTestCase还提供了一个flush()函数,因为Hibernate只有事务提交时才会执行SQL,为了验证你的ORM正确性,必须常常执行flush强制hibernate执行SQL。不过只要不执行提交,sql执行的结果不会影响测试数据库的实际数据。

       在mini-service/mini-web层的Service层都使用了集成测试用例。 

      因为集成测试依赖于真实的数据库等环境,因此希望在测试阶段不默认运行它们。在maven的parent的pom.xml中,定义了surefire插件,在test阶段并不执行package名里含integration的用例。在integration-test阶段才去会执行。也就是在执行mvn  integration-test  或mvn deploy,mvn install 时才会执行这些测试。

3.3 单元测试

       真正的单元测试,离不开EasyMock了,需要注意的是EasyMock早不需要基于接口,可以直接用cglib对类进行代理。

       在mini-service中,有这样一个"真正"单元测试的例子。

Site powered by a free Open Source Project / Non-profit License (more) of Confluence - the Enterprise wiki.
Learn more or evaluate Confluence for your organisation.
Powered by Atlassian Confluence, the Enterprise Wiki. (Version: 2.2.9 Build:#527 2006-09-07) - Bug/feature request - Contact Administrators