gpt4 book ai didi

java - 如何为自定义 Spring Batch Reader 编写 junit

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

下面是我的自定义 Spring Batch Reader。我必须编写包含 setPreparedStatementSetter()setRowMapper() 方法的 junit。无论我尝试什么,我的单元测试都不会涵盖这些方法中的代码。有人可以指出我如何为此类匿名方法编写 junit 吗?谢谢。

PS:我知道 junit 并不是为了测试框架特定的实现方法而编写的,但我需要它来实现代码覆盖率。

public class MyDataReader extends JdbcCursorItemReader<ABC> {
public MyReader(DataSource dataSource, String beginTime, String endTime) {
setSql(QUERY);
setPreparedStatementSetter(new PreparedStatementSetter() {

@Override
public void setValues(PreparedStatement ps) throws SQLException {
// Set parameters on the SQL query
ps.setLong(1, Long.parseLong(beginTime.trim()));
ps.setLong(2, Long.parseLong(endTime.trim()));
}
});

setDataSource(dataSource);
setRowMapper((ResultSet rs, int rowNum) -> {
ABC abc = new ABC();
abc.setDateTime(getLongOrNull("DT", rs));
abc.setStmt(getBooleanOrNull("SP", rs));

return abc;
});

}
}

最佳答案

您可以为 RowMapperPreparedStatementSetter 创建一个类,然后对它们进行单元测试。这是行映射器的示例:

import java.sql.ResultSet;
import java.sql.SQLException;

import org.springframework.jdbc.core.RowMapper;

public class ABCRowMapper implements RowMapper<ABC> {

@Override
public ABC mapRow(ResultSet rs, int rowNum) throws SQLException {
ABC abc = new ABC();
abc.setDateTime(rs.getLong("DT"));
abc.setStmt(rs.getBoolean("SP"));

return abc;
}

}

以及相应的测试:

import java.sql.ResultSet;

import org.junit.Assert;
import org.junit.Test;
import org.mockito.Mockito;

public class ABCRowMapperTest {

@Test
public void testABCRowMapper() throws Exception {
// given
ABCRowMapper rowMapper = new ABCRowMapper();
ResultSet resultSet = Mockito.mock(ResultSet.class);
Mockito.when(resultSet.getLong("DT")).thenReturn(1L);
Mockito.when(resultSet.getBoolean("SP")).thenReturn(true);

// when
ABC abc = rowMapper.mapRow(resultSet, 1);

// then
Assert.assertNotNull(abc);
Assert.assertEquals(abc.getDateTime(), 1L);
Assert.assertTrue(abc.getStmt());
}
}

希望这有帮助。

关于java - 如何为自定义 Spring Batch Reader 编写 junit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55131250/

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