gpt4 book ai didi

java - JDBC Spring Mockito

转载 作者:太空宇宙 更新时间:2023-11-04 11:25:52 28 4
gpt4 key购买 nike

我想测试这个方法(getDetails)是我的 DaoImpl 的一部分,但我不知道该怎么做。我知道我必须使用 JDBC 模板来测试模拟它的数据库:

 public List<DataLoadDetail> getDetails(int fileId, String templateType, String status, int start, int end) {

List<DataLoadDetail> list = new ArrayList<DataLoadDetail>();
StringBuffer sql = new StringBuffer();

sql.append("SELECT * FROM ( ")
.append("SELECT ROW_NUMBER() OVER(ORDER BY TB_DETAIL.UPLOADITEM_SEQ_NR ASC) AS RowNum, ")
.append("TB_DETAIL.UPLOAD_ID, TB_DETAIL.UPLOADITEM_SEQ_NR, TB_DETAIL.UPLOADITEM_ACTION_CD, ")
.append("TB_DETAIL.UPLOADITEM_INSERT_DT, TB_DETAIL.UPLOADITEM_UPDATE_DT, TB_DETAIL.UPLOADITEM_STATUS_CD, ")
.append("TB_DETAIL.UPLOADITEM_PAYLOAD, TB_DETAIL.UPLOADITEM_RESPONSE, TB_MESSAGE.DESCRIPTION ")
.append("FROM DL_DETAIL TB_DETAIL LEFT JOIN DL_MESSAGE TB_MESSAGE ")
.append("ON TB_DETAIL.UPLOAD_ID = TB_MESSAGE.UPLOAD_ID ")
.append("AND TB_DETAIL.UPLOADITEM_SEQ_NR = TB_MESSAGE.UPLOADITEM_SEQ_NR ")
.append("WHERE TB_DETAIL.UPLOAD_ID =:fileId ");

if (StringUtils.equalsIgnoreCase(status, "s")) {
sql.append(" AND TB_DETAIL.UPLOADITEM_STATUS_CD = 'S' ");
} else if (StringUtils.equalsIgnoreCase(status, "f")) {
sql.append(" AND TB_DETAIL.UPLOADITEM_STATUS_CD != 'S' ");
}

sql.append(" ) AS DT WHERE RowNum > :start ");

if (end > 0) {
sql.append(" AND RowNum <= :end ");
}

System.out.println("getDetails - File Id "+fileId+", Query --> " + sql.toString());

Map<String, Object> props = new HashMap<String, Object>();
props.put("fileId", fileId);
props.put("start", start);
props.put("end", end);

list = npTemplate.query(sql.toString(), props, new DataLoadDetailRowMapper());
return list;
}

applicationContext.xml 文件是:

<bean id="dataLoadDetailDao" class="com.hp.it.mdm.dao.impl.DataLoadDetailDaoImpl">
<property name="npTemplate">
<ref bean="nameParamJdbcTemplate"/>
</property>
<property name="dlmdao">
<ref bean="dlmdao"/>
</property>
</bean>

我在 StackOverflow 上看过几篇文章,但我无法理解测试的概念。

问候。

最佳答案

您可以做的是验证是否使用指定参数调用了npTemplate.query()方法。

您的测试可能如下所示:

private NameParamJdbcTemplate nTemplate = mock(NameParamJdbcTemplate.class);

@Test
public void test() {
//given
private DaoImpl daoImpl = new DaoImpl(nTemplate);
//when
daoImpl.getDetails(...);
//then
verify(nTemplate).query(any(), any(), any()); //or you can specify the exact parameters that should be passed.
}

关于java - JDBC Spring Mockito,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44372514/

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