我正在嘗試模擬(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條經(jīng)驗 獲得超2個贊
方法JdbcTemplate.execute()
重載。_
因此,當您使用匹配器模擬它時,any()
編譯器根本不知道您實際指的是哪種方法并拋出錯誤。
要解決這個問題,請在匹配器中提供一個類來解決這種歧義。
例如,如果你想模擬
JdbcTemplate.execute(PreparedStatementCreator psc, PreparedStatementCallback<T> action)
使用
doThrow(securityDAOException).when(jdbcTemplate).execute(any(PreparedStatementCreator.class), any(PreparedStatementCallback.class));
添加回答
舉報
0/150
提交
取消