у меня есть класс DAO, который я пытаюсь написать тестовые случаи
Вот модифицированный воспроизводимый код
класс DAO, который я пытаюсь проверить
@Component
public class SomeDAO {
@Autowired
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
public boolean dataInTable(String id) {
String sql = "SELECT COUNT(*) " +
"FROM table1" +
"WHERE id =:id";
MapSqlParameterSource sqlParms = new MapSqlParameterSource();
sqlParms.addValue("id", id
try {
int count = namedParameterJdbcTemplate.queryForObject(sql, sqlParms, Integer.class);
return (count > 0) ? true : false;
} catch (Exception e) {
log.error("Error checking existence of id : " + id);
throw e;
}
}
}
Когда я запускаю тест, он выдает NullPointer на
int count = namedParameterJdbcTemplate.queryForObject(sql, sqlParms, Integer.class);
, поэтому я считаю, что mockito не возвращает значение когда, затем Return
я искал вокруг переполнения стека, и это похоже на то, что я должно работать, но я получаю NullPointerException.
Я также пытался использовать то же значение для sql строки и mapObject в качестве класса dao вместо anyString () и anyMap ()
но не сработало
Контрольный пример
@RunWith(MockitoJUnitRunner.class)
public class SomeDAOTest {
@InjectMocks
SomeDAO someDao
@Mock
NamedParameterJdbcTemplate namedParameterJdbcTemplate;
@Before
public void init() {
MockitoAnnotations.initMocks(this);
}
@Test
public void TestdataInTable(){
//
when(namedParameterJdbcTemplate.queryForObject(anyString(), anyMap(),eq(Integer.class))).thenReturn(1);
assertEquals( true,someDao.dataInTable("123456"));
}
}