Java 如何为定制spring批处理读取器编写junits

Java 如何为定制spring批处理读取器编写junits,java,unit-testing,junit,spring-batch,spring-test,Java,Unit Testing,Junit,Spring Batch,Spring Test,下面是我定制的Spring批处理阅读器。我必须编写JUnit,其中包括setPreparedStatementSetter()和setRowMapper()方法。无论我尝试什么,我的单元测试都没有涵盖这些方法中的代码。有人能告诉我如何为这种匿名方法编写junit吗。谢谢 PS:我知道junits不是为了测试特定于框架的实现方法而编写的,但我需要它来覆盖我的代码 public class MyDataReader extends JdbcCursorItemReader<ABC> {

下面是我定制的Spring批处理阅读器。我必须编写JUnit,其中包括
setPreparedStatementSetter()
setRowMapper()
方法。无论我尝试什么,我的单元测试都没有涵盖这些方法中的代码。有人能告诉我如何为这种匿名方法编写junit吗。谢谢

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

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;
    });

   }
}
公共类MyDataReader扩展了JdbcCursorItemReader{
公共MyReader(数据源数据源字符串开始时间字符串结束时间){
setSql(查询);
setPreparedStatementSetter(新的PreparedStatementSetter(){
@凌驾
public void setValues(PreparedStatement ps)引发SQLException{
//设置SQL查询的参数
ps.setLong(1,Long.parseLong(beginTime.trim());
ps.setLong(2,Long.parseLong(endTime.trim());
}
});
setDataSource(数据源);
setRowMapper((结果集rs,int rowNum)->{
ABC=新ABC();
abc.setDateTime(getLongOrNull(“DT”,rs));
abc.设置TMT(getBooleanOrNull(“SP”,rs));
返回abc;
});
}
}

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

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;
    }

}

希望这能有所帮助。

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

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;
    }

}

希望这能有所帮助。

谢谢,感谢您的回复!我可以试试,但我不想为了代码覆盖率的目的而重构代码。你绝对应该这样做!不是为了覆盖率,而是为了确保映射逻辑按预期工作。太好了!在这种情况下,请。谢谢你,感谢你的回复!我可以试试,但我不想为了代码覆盖率的目的而重构代码。你绝对应该这样做!不是为了覆盖率,而是为了确保映射逻辑按预期工作。太好了!这样的话,谢谢。