我试图模拟Spring框架的JdbcTemplate类的方法。该方法具有以下签名:
public <T> T queryForObject(String sql, Class<T> requiredType) throws DataAccessException {...}正在进行如下所述的嘲弄:
when(jdbcTemplate.queryForObject(anyString(), eq(String.class))).thenReturn("data");但是,此调用引发以下异常
java.lang.ClassCastException: org.mockito.internal.creation.jmock.ClassImposterizer$ClassWithSuperclassToWorkAroundCglibBug$$EnhancerByMockitoWithCGLIB$$ce187d66 cannot be cast to java.lang.String
at test.DaoJdbcTest.setUp(DaoJdbcTest.java:81)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
...知道我做错了什么吗?
提前感谢~
编辑:
下面是完整的代码:
public class DaoJdbc extends NamedParameterJdbcSupport {
public String query(String sql) {
return getJdbcTemplate().queryForObject(sql, String.class);
}
}
public class DaoJdbcTest {
@Mock(answer = Answers.RETURNS_SMART_NULLS)
private JdbcTemplate jdbcTemplate;
private DaoJdbc dao;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
dao = new DaoJdbc();
dao.setJdbcTemplate(jdbcTemplate);
Mockito.when(jdbcTemplate.queryForObject(anyString(), Matchers.eq(String.class))).thenReturn("data");
}
@Test
public void testQuery() {
String ret = dao.query("select 'test' from dual");
assertEquals("data", ret);
verify(jdbcTemplate).queryForObject(anyString(), eq(String.class));
}
}发布于 2015-06-22 17:07:08
删除答案= Answers.RETURNS_SMART_NULLS。当我移除它的时候测试就通过了。这个功能是干什么的?默认的null行为对我来说很好。
作为奖励,您还可以使用MockitoJunitRunner来稍微清理代码.
@RunWith(MockitoJUnitRunner.class)
public class DaoJdbcTest {
@Mock
private JdbcTemplate jdbcTemplate;
@InjectMocks
private DaoJdbc dao;
@Before
public void setUp() throws Exception {
Mockito.when(jdbcTemplate.queryForObject(anyString(), Matchers.eq(String.class))).thenReturn("data");
}
@Test
public void testQuery() {
String ret = dao.query("select 'test' from dual");
assertEquals("data", ret);
verify(jdbcTemplate).queryForObject(anyString(), eq(String.class));
}
}https://stackoverflow.com/questions/30984250
复制相似问题