如何模拟JdbcTemplate.queryForObject()方法
我的方法看起来像这样:
public class Decompile extends JdbcDaoSupport public void getRunner(){ String val = this.getJdbcTemplate().queryForObject(sql,String.class, new Object[]{1001}); } }
请建议我如何嘲笑这个。
一个EasyMock-3.0示例
String sql = "select * from t1"; Object[] params = new Object[] { 1001 }; JdbcTemplate t = EasyMock.createMock(JdbcTemplate.class); EasyMock.expect( t.queryForObject(sql, String.class, params)).andReturn("res"); EasyMock.replay(t);
@Mock JdbcTemplate jdbctemplate; @Test public void testRun(){ when(jdbctemplate.queryForObject(anyString(),eq(String.class),anyObject()).thenReturn("data"); }
使用JMockit,代码如下:
@Mocked JdbcTemplate jdbcTemplate new Expectations() { jdbcTemplate.queryForObject(sql,String.class, new Object[]{1001}); result = "result you want"; }
有关JMockit的更多信息,请点击此处 。
使用Mockito,您还可以模拟queryForObject(..)方法,如下所示:
@Mock JdbcTemplate jdbctemplate; @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); } @Test public void testRun(){ when(jdbctemplate.queryForObject(eq("input string"), refEq(new Object[]{1001}), eq(String.class))).thenReturn("data"); }
一些额外的信息来源 – http://sourcesnippets.blogspot.com/2013/06/jdbc-dao-unit-test-using-mockito.html