anyString () adalah null, bukan string kosong

Sep 04 2020

Saya mencoba menguji dao saya, namun ketika saya meneruskan anyString (), di dao saya keluar sebagai string null dan sebagai hasilnya, itu tidak mengembalikan objek tiruan yang saya inginkan

@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();
}

Dao saya

@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;

}

Jawaban

Campingenieur Sep 04 2020 at 14:55

Jadi seperti yang Anda sebutkan dengan benar anyString()tidak hanya cocok untuk String non-null. dan saat Anda masuk queryke metode Anda, Anda harus memverifikasi, bahwa autowired Anda querytidak null. Sebagai alternatif, Anda bisa tetap menggunakan any()atau nullable(String.class)yang cocok untuk null. Karena pengujian Anda tidak bergantung pada querynilai, Anda dapat menggunakan ini dengan aman.

Namun karena kode Anda tidak menunjukkan cara kerja Injeksi Anda, kami tidak mungkin menyelidiki masalah Anda lebih lanjut. Jika ini perlu bagi Anda, tambahkan bagian kode yang relevan.