为了账号安全,请及时绑定邮箱和手机立即绑定

如何模拟 jdbcTemplate.execute(callableStatement);

如何模拟 jdbcTemplate.execute(callableStatement);

慕容708150 2023-04-19 10:34:53
我正在尝试模拟(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));



查看完整回答
反对 回复 2023-04-19
  • 1 回答
  • 0 关注
  • 149 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信