anyString () boş dize yerine null

Sep 04 2020

Dao'mu test etmeye çalışıyorum, ancak anyString () 'i geçtiğimde, dao'mda boş bir dize olarak çıkıyor ve sonuç olarak, istediğim alay konusu nesnemi döndürmüyor

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

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

}

Yanıtlar

Campingenieur Sep 04 2020 at 14:55

Doğru olarak belirttiğiniz anyString()gibi yalnızca boş olmayan Dizeler için eşleşir. ve queryyönteminize geçerken otomatik kablolamanızın queryboş olmadığını doğrulamalısınız . Bir alternatif olarak sopa olabilir any()veya nullable(String.class)null hangi maçların. Testiniz querydeğere bağlı olmadığı için bunu güvenle kullanabilirsiniz.

Ancak, kodunuz Enjeksiyonunuzun nasıl çalıştığını göstermediğinden, sorununuzu daha fazla araştırmamız mümkün değildir. Bu sizin için gerekliyse, lütfen ilgili kod parçalarını ekleyin.