Как написать джунит для кастомного весеннего пакетного ридера - PullRequest
0 голосов
/ 13 марта 2019

ниже мой пользовательский Spring Batch Reader. Я ДОЛЖЕН написать джунты, которые охватывают setPreparedStatementSetter() и setRowMapper() методы. Что бы я ни пытался, мой модульный тест не охватывает код в этих методах. Может кто-нибудь, пожалуйста, укажите мне, как написать junit для таких анонимных методов. Спасибо.

PS : Я знаю, что джунты не предназначены для тестирования специфичных для платформы методов реализации, но мне это нужно для покрытия кода.

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

   }
}

1 Ответ

0 голосов
/ 13 марта 2019

Вы можете создать класс для ваших RowMapper и 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;
    }

}

и соответствующий тест:

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

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...