Spring单元测试

本文详细介绍了如何在Spring框架下进行服务层的单元测试,主要利用Spring的AbstractTransactionalDataSourceSpringContextTests基类,实现事务控制并加载配置文件。通过示例代码展示测试用例的编写,包括准备jar包、继承测试基类以及编写具体的测试方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文简单的描述一下基于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方法,这个方法主要是为了取得spring的application-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);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值