anyString () là null thay vì chuỗi rỗng
Tôi đang cố gắng kiểm tra dao của mình, tuy nhiên khi tôi vượt qua anyString (), trong dao của tôi, nó xuất hiện dưới dạng chuỗi null và kết quả là nó không trả về đối tượng bị chế nhạo mà tôi muốn
@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();
}
My Dao
@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;
}
Trả lời
Vì vậy, như bạn đã đề cập một cách chính xác anyString(), chỉ khớp với các Chuỗi không null. và khi bạn chuyển queryvào phương thức của mình, bạn nên xác minh rằng chế độ tự động tải của bạn querykhông phải là rỗng. Để thay thế, bạn có thể dính vào any()hoặc nullable(String.class)phù hợp với null. Vì thử nghiệm của bạn không phụ thuộc vào querygiá trị nên bạn có thể sử dụng nó một cách an toàn.
Tuy nhiên, vì mã của bạn không hiển thị cách thức hoạt động của Injection nên chúng tôi không thể điều tra thêm vấn đề của bạn. Nếu điều này là cần thiết cho bạn, vui lòng thêm các phần mã liên quan.