gpt4 book ai didi

java - 在 Spring Batch 中使用 getNamedParameterJdbcTemplate() 方法运行 JUnit 时出现问题

转载 作者:行者123 更新时间:2023-11-30 03:55:22 26 4
gpt4 key购买 nike

我正在尝试为我的 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);

当我运行 JUnit 时,transDaoJdbcImpl 文件中的 fetchHistory() 。由于我执行了 super.getNamedParameterJdbcTemplate().queryForObject ,因此会调用 NamedParameterJdbcTemplate 的父类(super class)方法。我不希望这样,但我希望在重写功能时调用我在 JUnit 中重写的 getNamedParameterJdbcTemplate() 。目前这种情况还没有发生,并且 getNamedParameterJdbcTemplate()fetchHistory() 中始终为 null。谁能告诉我如何做到这一点以及我上面的代码有什么问题。任何帮助都会很棒,因为我已经在这个问题上坚持了很长时间了。

谢谢

维肯21

最佳答案

所以这是对我有用的解决方案。因为这是一个特殊的问题案例,我没有从任何人那里得到任何评论或答案,认为对我有用的解决方案也可以帮助将来面临相同问题的任何人。

Soution:JUnit 代码

private transDaoJdbcImpl dao;
/**
* @throws java.lang.Exception
*/
@SuppressWarnings("unchecked")
@Before
public void setUp() throws Exception {
dao=new transDaoJdbcImpl ();
tranVo vo=new tranVo ();
vo.setId(1);
NamedParameterJdbcTemplate jdbcTemplateMock = Mockito.mock(NamedParameterJdbcTemplate.class);
ReflectionTestUtils.setField(dao, "namedParameterJdbcTemplate", jdbcTemplateMock);
Mockito.when(jdbcTemplateMock.queryForObject(Mockito.anyString(),Mockito.anyMap() ,Mockito.any(RowMapper.class))).thenReturn(vo);
}


@Test
public void testFetchHistory() {
tranVo vo=dao.retrieveLatestHistory(1);

Assert.assertEquals("TEST",vo.getCd());
}

关于java - 在 Spring Batch 中使用 getNamedParameterJdbcTemplate() 方法运行 JUnit 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23362690/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com