首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弹簧jdbcTemplate Junit

弹簧jdbcTemplate Junit
EN

Stack Overflow用户
提问于 2016-07-14 12:54:12
回答 1查看 7K关注 0票数 1

我有一个DAO应用程序,如下所示。我想上这节课。我的班长得像这样。

代码语言:javascript
复制
    public class DaoImpl implements Dao{

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

   }

我的junit类看起来像这样

代码语言:javascript
复制
@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的以下异常。

代码语言:javascript
复制
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 unit testing编写了我的junit

但是,看起来不起作用。

EN

回答 1

Stack Overflow用户

发布于 2016-07-14 15:43:13

你的问题在于这一行:

代码语言:javascript
复制
Mockito.when(((JdbcDaoSupport)dao.getTemplate())).thenReturn(jdbcTemplate);

您已经用@Autowired注释了dao,所以它不是一个模拟的对象。您可能要做的是使用SpringTestReflectionUtils将dao中的jdbcTemplate设置为模拟对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38374823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档