java spring 单元测试_使用 Spring 进行单元测试

package DAO;

import Java.sql.ResultSet;

import Java.sql.SQLException;

import Java.util.HashMap;

import Java.util.List;

import Java.util.Map;

import org.Springframework.context.ApplicationContext;

import org.Springframework.context.support.ClassPathXmlApplicationContext;

import org.Springframework.jdbc.core.RowMapper;

import org.Springframework.jdbc.core.namedparam.NamedParameterJdbcDaoSupport;

import org.Springframework.jdbc.core.simple.ParameterizedRowMapper;

import domain.Account;

public class AccountDao extends NamedParameterJdbcDaoSupport {

public void saveAccount(Account account) {

String sql = "insert into tbl_account(id,name,age,sex) " +

"values(:id,:name,:age,:sex)";

Map paramMap = new HashMap();

paramMap.put("id", account.getId());

paramMap.put("name", account.getName());

paramMap.put("age", account.getAge());

paramMap.put("sex",account.getSex());

getNamedParameterJdbcTemplate().update(sql, paramMap);

}

public Account getAccountById(int id) {

String sql = "select id,name,age,sex from tbl_account where id=:id";

Map paramMap = new HashMap();

paramMap.put("id", id);

List matches = getNamedParameterJdbcTemplate().query(sql,

paramMap,new ParameterizedRowMapper() {

@Override

public Account mapRow(ResultSet rs, int rowNum)

throws SQLException {

Account a = new Account();

a.setId(rs.getInt(1));

a.setName(rs.getString(2));

a.setAge(rs.getInt(3));

a.setSex(rs.getString(4));

return a;

}

});

return matches.size()>0?matches.get(0):null;

}

}

AccountDao 定义了几个账号对象的数据库访问方法:

saveAccount:负责把传入的账号对象入库

getAccountById:负责根据 Id 查询账号

清单 3. AccountService.Java

package service;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.Springframework.beans.factory.annotation.Autowired;

import DAO.AccountDao;

import domain.Account;

public class AccountService {

private static final Log log = LogFactory.getLog(AccountService.class);

@Autowired

private AccountDao accountDao;

public Account getAccountById(int id) {

return accountDao.getAccountById(id);

}

public void insertIfNotExist(Account account) {

Account acct = accountDao.getAccountById(account.getId());

if(acct==null) {

log.debug("No "+account+" found,would insert it.");

accountDao.saveAccount(account);

}

acct = null;

}

}

AccountService 包括下列方法:

getAccountById:根据 Id 查询账号信息

insertIfNotExist:根据传入的对象插入数据库

其依赖的 DAO 对象 accountDao 是通过 Spring 注释标签 @Autowired 自动注入的。

上述几个类的依赖关系是通过 Spring 进行管理的,配置文件如下:

清单 4. Spring 配置文件

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:context="http://www.Springframework.org/schema/context"

xsi:schemaLocation="http://www.Springframework.org/schema/beans

http://www.Springframework.org/schema/beans/Spring-beans-3.0.xsd

http://www.Springframework.org/schema/context

http://www.Springframework.org/schema/context/Spring-context-3.0.xsd ">

注意其中的“”的作用,这个配置启用了 Spring 对 Annotation 的支持,这样在我们的测试类中 @Autowired 注释才会起作用(如果用了 Spring 测试框架,则不需要这样的配置项,稍后会演示)。另外还有一个 accountDao 依赖的 initer bean, 这个 bean 的作用是加载 log4j 日志环境,不是必须的。

另外还有一个要注意的地方,就是 datasource 的定义,由于我们使用的是 Spring Jdbc Template,所以只要定义一个 org.Springframework.jdbc.datasource.DriverManagerDataSource 类型的 datasource 即可。这里我们使用了简单的数据库 HSQL、Single Server 运行模式,通过 JDBC 进行访问。实际测试中,大家可以选择 Oracle 或者 DB2、Mysql 等。

好,万事具备,下面我们来用 Junit4 框架测试 acco

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值