我正在尝试模拟(Spring boot、JUnit、Oracle)jdbcTemplate.execute(CallableStatementCreator, CallableStatementCallback);public class ExceptionTest{ @Autowired private SecurityDAOImpl securityDAOImplMock; @Mock private JdbcTemplate jdbcTemplate; @Autowired private JdbcTemplate resetJdbcTemplate; @Before public void init() throws Exception { securityDAOImplMock = spy(new SecurityDAOImpl()); MockitoAnnotations.initMocks(this); } @SuppressWarnings("unchecked") @Test(expected = SecurityDAOException.class) public void testUpdateProfileException() { DataAccessException dataAccessException = new DataAccessException("Mock Exception", new Exception("Mocked DataAccessException")) { private static final long serialVersionUID = 1L; }; ReflectionTestUtils.setField(securityDAOImplMock, "jdbcTemplate", jdbcTemplate); doThrow(dataAccessException).when(jdbcTemplate).execute(any(), any()); securityDAOImplMock.isTooManyFailedAttempt("", 7, "", ""); } @After public void reset() { ReflectionTestUtils.setField(securityDAOImplMock, "jdbcTemplate", resetJdbcTemplate); }}我收到以下编译时异常:The method execute(PreparedStatementCreator, PreparedStatementCallback<Object>) is ambiguous for the type 在这条线上doThrow(securityDAOException).when(jdbcTemplate).execute(any(), any());如何模拟 jdbcTemplate.execute(callableStatementCreator, callableStatementCallback)。如何让它工作?
1 回答
慕斯王
TA贡献1864条经验 获得超2个赞
方法JdbcTemplate.execute()
重载。_
因此,当您使用匹配器模拟它时,any()
编译器根本不知道您实际指的是哪种方法并抛出错误。
要解决这个问题,请在匹配器中提供一个类来解决这种歧义。
例如,如果你想模拟
JdbcTemplate.execute(PreparedStatementCreator psc, PreparedStatementCallback<T> action)
使用
doThrow(securityDAOException).when(jdbcTemplate).execute(any(PreparedStatementCreator.class), any(PreparedStatementCallback.class));
添加回答
举报
0/150
提交
取消