简体   繁体   English

模拟对象未返回预期值

[英]Mocked Object not returning expected value

I'm unit testing my dao.我正在对我的 dao 进行单元测试。 I create a list, I add an object to my list and I tell mockito when my method is called, to return my list with a single object.我创建了一个列表,我将一个对象添加到我的列表中,并在调用我的方法时告诉 mockito,用单个对象返回我的列表。 However, when I look at what's returned from my dao method, it's an empty list.但是,当我查看 dao 方法返回的内容时,它是一个空列表。 I'm not sure what I'm missing.我不确定我错过了什么。

@InjectMocks
private Dao dao;

@Mock
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 class:我的道课:

public List<MyObj> getData(String arg1, String arg2) {
    List<MyObj> list = new ArrayList<MyObj>();

    try {

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

I actually made a mistake in describing the problem.我实际上在描述问题时犯了一个错误。

I had two jdbcTemplates in my dao.我的 dao 中有两个 jdbcTemplates。

So the way I resolved it is to use a @Qualifier("jdbcTemplate") when creating a mock jdbctemplate所以我解决它的方法是在创建模拟 jdbctemplate 时使用@Qualifier("jdbcTemplate")

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM