【发布时间】:2020-04-28 08:19:53
【问题描述】:
我有一个 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 不会在何时返回值,然后返回
我搜索了堆栈溢出,看起来我应该可以工作,但我得到了 NullPointerException。
我也尝试过使用与 dao 类相同的 sql 字符串和 mapObject 值,而不是 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"));
}
}
【问题讨论】:
标签: spring-boot junit mockito jdbctemplate