Как протестировать методы DaoImpl с использованием Junit и Mockito - PullRequest
0 голосов
/ 04 июля 2019

Я использую spring с jdbcTemplate для своего приложения и хочу протестировать класс DaoImpl. Имеется реализация для операций вставки, обновления и извлечения

Метод Дао класса

//dummy class
public class PlayerDAOImpl implements PlayerDAO {

@Autowired
private JdbcTemplate jdbcTemplate;


public Integer getPlayer(int playerId) {

    String sql = "SELECT ccount(1) FROM PLAYER WHERE 
     PLAYER_ID = ?";
     return  (jdbcTemplate. queryForObject("Query", new Object[]{playerId}, 
  Integer.class)!=0); //here only throws exception

}
//other methods
}

и для этого я написал класс Test, который успешно выполняется для вставки и обновления, но при получении он выдает исключение nullpointer.

 @RunWith(MockitoJUnitRunner.class)
 class Test{
 @InjectMocks
  PlayerDAOImpl dao;
 @Mock
 JdbcTemplate jdbcTemplate;

  @Test
  public void retrieveResult(){

   Mockito.when(dao.getPlayer(int playerId)).thenReturn(false);

   //Assert Statement

  }}

Я гуглил / пробовал, но не нашел решения, которое помогло мне. Итак, как протестировать этот метод или внедрить jdbcTemplate, чтобы он был успешным.

Спасибо за помощь !!

1 Ответ

1 голос
/ 04 июля 2019

Проблема в том, что вы пытаетесь смоделировать тестируемый класс (PlayerDAOImpl) вместо его зависимости (JdbcTemplate).

Измените ваш макет на что-то вроде:

Mockito.when(jdbcTemplate.queryForObject(Mockito.any(), Mockito.any(), Mockito.any()).thenReturn(COUNT);

Где COUNT - это Integer, а затем напишите свои утверждения о возвращаемом значении dao.getPlayer.

...