簡體   English   中英

Spring jdbcTemplate Junit

[英]Spring jdbcTemplate Junit

我有一個DAO應用程序如下。 我想要這個班級。 我的班級看起來像這樣。

    public class DaoImpl implements Dao{

    @Override
    public User getUserInfo(String userid) {
        return getTemplate().queryForObject(QUERY, new Object[] { userid },
                new BeanPropertyRowMapper<User>(User.class));
     }

   }

我的junit類看起來像這樣

@RunWith(SpringJUnit4ClassRunner.class)
public class DaoImplTests{

    @Autowired
    private Dao dao;

    @Mock
    JdbcTemplate jdbcTemplate;

    @Test
    public void testUsingMockito() {
        try {
            User mockedUserInfo = new User();
            //setters
            mockedUserInfo.setXXX;
            mockedUserInfo.setYYY;

            Mockito.when(((JdbcDaoSupport)dao.getTemplate())).thenReturn(jdbcTemplate);
            Mockito.when(jdbcTemplate.queryForObject(Mockito.anyString(), Mockito.any(Object[].class),
                    Mockito.any(RowMapper.class))).thenReturn(mockedUserInfo);
            User userInfo = dao.getUserInfo("");
            Assert.assertNotNull(userInfo);
            Assert.assertEquals(mockedUserInfo.getXXX(), userInfo.getXXX());
            //few more assertions
        } catch (Exception e) {
            Assert.fail(" : " + e.getMessage());
        }
    }

}

當我執行這個測試用例時,我得到了來自mockito的異常。

org.mockito.exceptions.misusing.MissingMethodInvocationException: 
when() requires an argument which has to be 'a method call on a mock'.
For example:
    when(mock.getArticles()).thenReturn(articles);

Also, this error might show up because:
1. you stub either of: final/private/equals()/hashCode() methods.
   Those methods *cannot* be stubbed/verified.
2. inside when() you don't call method on mock but on some other object.
3. the parent of the mocked class is not public.
   It is a limitation of the mock engine.

我的查詢:

  1. 我的班級如何成功
  2. 此異常即將發生,因為getJdbcTemplate是最終的JdbcDaoSupport類。 這種方法有其他選擇嗎?

我使用post Spring jdbcTemplate單​​元測試編寫了我的junit

但是,看起來它不起作用。

你問題在於這一行:

Mockito.when(((JdbcDaoSupport)dao.getTemplate())).thenReturn(jdbcTemplate);

你有@Autowired注釋,所以它不是一個模擬對象。 您可能想要做的是使用SpringTestReflectionUtils將dao中的jdbcTemplate設置為模擬對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM