我在我的应用程序中使用带有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使其成功。
感谢帮助!
答案 0 :(得分:1)
问题是您试图模拟被测类(PlayerDAOImpl
)而不是其依赖项(JdbcTemplate
)。
将模拟内容更改为:
Mockito.when(jdbcTemplate.queryForObject(Mockito.any(), Mockito.any(), Mockito.any()).thenReturn(COUNT);
COUNT
是Integer
的地方,然后在dao.getPlayer
的返回值上写断言。