如何使用Junit和Mockito测试DaoImpl方法

时间:2019-07-04 02:30:52

标签: spring mockito junit4 jdbctemplate

我在我的应用程序中使用带有jdbcTemplate的spring,并且我想测试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

  }}

我已经Google搜索/尝试过,但是找不到适合我的解决方案。因此,如何测试该方法或注入jdbcTemplate使其成功。

感谢帮助!

1 个答案:

答案 0 :(得分:1)

问题是您试图模拟被测类(PlayerDAOImpl)而不是其依赖项(JdbcTemplate)。

将模拟内容更改为:

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

COUNTInteger的地方,然后在dao.getPlayer的返回值上写断言。