【发布时间】:2014-06-15 06:35:27
【问题描述】:
我正在尝试为我的 Spring Batch 项目中的 DAO 类实现 JUnit。 因为我不想直接访问数据库,所以我在我的 JUnit 中覆盖了 jdbctemplate 类的方法。
以下是我正在使用的 DAO 类和 JUnit 代码示例
DAO 类:
班级transDaoJdbcImpl
public class transDaoJdbcImpl extends jdbcAbstractDao {
public tranVo fetchHistory(Integer feedFileId) {
try {
Map<String, Object> binding = new HashMap<String, Object>();
binding.put("ID", "value");
return super.getNamedParameterJdbcTemplate().queryForObject(
this.sSQL,
binding,
new testMapper());
} catch (Exception e) {
e.printstacktrace();
}
}
}
class DistbatchAbstractDao {
public abstract class DistbatchAbstractDao extends NamedParameterJdbcDaoSupport {
protected int update(String sql, Map<String, ?> paramMap) throws Exception {
try {
return getNamedParameterJdbcTemplate().update(sql, paramMap);
} catch (Exception e) {
logger.error("update() error:\n" + e);
throw e;
}
}
........
other methods
}
JUnit 代码:
NamedParameterJdbcTemplate template =
new NamedParameterJdbcTemplate(Mockito.mock(DataSource.class)) {
@Override
public <T> T queryForObject(String sql, Map<String, ?> paramMap, RowMapper<T> rowMapper)
throws Exception {
return null;
}
};
transDaoJdbcImpl() dao = new transDaoJdbcImpl() {
@Override
public NamedParameterJdbcTemplate getNamedParameterJdbcTemplate() {
return template;
}
};
ReflectionTestUtils.setField(dao, "SQLName", sql);
dao.fetchHistory(1099999);
当我在 transDaoJdbcImpl 文件中运行 JUnit fetchHistory() 时。
因为我做了一个super.getNamedParameterJdbcTemplate().queryForObject,所以NamedParameterJdbcTemplate的超类方法被调用了。
我不希望这样,但我希望在我覆盖功能时调用我在JUnit 中覆盖的getNamedParameterJdbcTemplate()。
目前这没有发生,getNamedParameterJdbcTemplate() 在fetchHistory() 中始终为空。
谁能让我知道我该怎么做以及我上面的代码有什么问题。
任何帮助都会很棒,因为我已经坚持了很长时间。
谢谢
维肯21
【问题讨论】:
标签: java spring batch-processing dao