当前位置: 首页 > 图文教程 > Java技术 > Web框架 > 浅析Spring中的单元测试

Web框架
Struts开发过程中的异常处理机制
ServletContext与ServletConfig分析
使用Ajax的挑战
Web程序从Struts向Stripes框架的移植
Shale不是Struts
Web框架:基于Ajax的应用程序架构汇总
Web框架:使用Ajax技术开发Web应用程序
Web框架:简单理解Hibernate三种状态的概念及互相转化
Web框架:浅谈Struts2中拦截器应用
Web框架:Struts2中的Action
Web框架:Struts2高级文件上传
Web框架:小编谈嵌入XFire服务介绍及实现
Web框架:DWR中signatures标签的使用
WEB框架:小编总结Struts2的经典输入校验
WEB框架:小编祥谈Struts2的数据标签中Action与Bean标签的使用
Web框架:小议struts2类型转换
Web框架:小编浅谈Struts2的pub-sub事件模型
Web框架:小编简述JSF
Web框架:Hibernate事务管理
Web框架:Struts高级特性(StrutsAdvancedFeature)验证

Web框架 中的 浅析Spring中的单元测试


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-12-26   浏览: 354 ::
收藏到网摘: n/a

本文简单的描述一下基于spring系统service层的单元测试

 

Spring本身即是一个容器,所有的业务对象都是通过spring容器来管理,spring的注入特点让我们轻松的解除了类与类之间的耦合性。但是也给我们写单元测试带来了不少的麻烦,不过这种情况是在没有考虑spring提供的单元测试工具的情况下才会发生的事情。

 

1 准备需要的jar包。

 

   spring-mock.jar naming-factory-dbcp.jar。第一个jar包中包括了spring提供的单元测试工具类,第二个jar包是提供建立jdbc连接所需要的类。

 

2 继承 AbstractTransactionalDataSourceSpringContextTests

 

  Spring提供了几种基于junit的单元测试工具类,这里只介绍AbstractTransactionalDataSourceSpringContextTests,其他的请看官方文档。这是一个具有事务的单元测试用例,你可以设置单元测试成功后数据库事务是提交还是回滚,默认为回滚。

 

在继承类中需要实现getConfigLocations方法,这个方法主要是为了取得springapplication-context.xml文件。

 

protected String[] getConfigLocations() {

        String[] config = new String[] {

                "xxx-applicationContext.xml", "xxxx-applicationContext.xml"

            };

 

        return config;

    }

 

注意,一:如果才用上面的写法,这些xml文件必须在classpath下;二:TransactionManager只能定义一个。

 

3 写自己的测试用例吧。。;-)

 

示例代码:

 

public abstract class MyDependencyInjectionSpringContextTests

    extends AbstractTransactionalDataSourceSpringContextTests {

    protected ServiceContext context;

 

 

 

    public MyDependencyInjectionSpringContextTests() {

    }

 

    /**

     * 重写父类的onSetUpBeforeTransaction方法.

     *

     */

 

    protected void onSetUpBeforeTransaction() throws Exception {

        super.onSetUpBeforeTransaction();

       //此处可以加入你想进行的统一操作

 

       。。。。。

 

        //调用子类的处理

        beforeSetUp();

    }

 

    protected abstract void beforeSetUp() throws Exception;

 

    protected String[] getConfigLocations() {

        String[] config = new String[] {

                "service-applicationContext.xml", "dao-applicationContext.xml"

            };

 

        return config;

    }

}

 

====================================================================

 

  public class MockServiceTest

    extends MyDependencyInjectionSpringContextTests {

    Mock mock;

    MockService service;

 

 

 

    protected void beforeSetUp() throws Exception { 

//初始化测试需要使用的数据

mock=new Mock();

mock.setName("test");

mock.setType(1);

service=(MockService) applicationContext.getBean(

                "mockService");

      

    }

   

 

 

 

    public void testAddMock() {

        //测试方法

service.addMock(mock);

//这里使用的是是hibernate,增加后主键被填充,所以只要判断实体对象的id是否为null即可

Assert.assertTrue("测试addMock方法失败。" mock.getMockId!=null);

 

    }

 

 

 

    public static void main(String[] args) {

        junit.textui.TestRunner.run(MockServiceTest.class);

    }

}