我正在尝试测试我的dao,但是当我传递anystring()时,在我的dao中它将作为一个空字符串出现,因此,它不会返回我想要的模拟对象
@InjectMocks
private Dao dao;
@Mock
@Qualifier("jdbcTemp")
private JdbcTemplate jdbcTemp;
@Test
public void testGetData() {
List<MyObj> list = new ArrayList<>();
MyObj myObj = new MyObj();
myObj.setMethod("method val");
list.add(myobj);
Mockito.when(jdbcTemp.query(anyString(), Mockito.any(PreparedStatementSetter.class),
Mockito.any(Dao.MyRowMapper.class))).thenReturn(list);
List<MyObj> res = dao.getData(param1, param2); // this is empty, instead of having a value of 1
Assertions.assertThat(res).isNotNull();
}
我的刀
@Autowired
private String query;
@Autowired
private JdbcTemplate jdbcTemp;
public List<MyObj> getData(String arg1, String arg2) {
List<MyObj> list = new ArrayList<MyObj>();
try {
// query below is null instead of empty string
list.addAll(jdbcTemp.query(query, new PreparedStatementSetter() {
public void setValues(PreparedStatement pstmt) throws SQLException {
pstmt.setString(PARAM_ONE, arg1);
pstmt.setString(PARAM_TWO, arg2);
}
}, new MyRowMapper()));
} catch (Exception exp) {
}
return list;
}
1条答案
按热度按时间nimxete21#
所以你说得对
anyString()
只匹配非空字符串。当你经过的时候query
在您的方法中,您应该验证query
不为空。作为你可以坚持的另一种选择any()
或者nullable(String.class)
与null匹配。因为你的测试不依赖于query
你可以安全地使用它。但是,由于您的代码没有显示您的注入是如何工作的,因此我们无法进一步调查您的问题。如果有必要,请添加相关代码部分。