用 Spy 模拟 jdbcTemplate 查询异常(junit5)
Simulate jdbcTemplate query Exception with Spy (junit5)
我正在使用 Spy 而不是 Mock,因为我想要其他方法中的常规功能。
我想在调用 jdbcTemplate 查询时模拟异常。
JdbcTemplate.query 原型是 public <T> List<T> query(String sql, RowMapper<T> rowMapper) throws DataAccessException
我这样称呼它:
jdbcTemplate.query("select 1 from dual", new SingleColumnRowMapper<>());
这是我的间谍贴:
@SpyBean
JdbcTemplate jdbcTemplate;
这是测试:
@Test
void testDbIsDown() {
when(jdbcTemplate.query(anyString(),any(SingleColumnRowMapper.class)))
.thenThrow(new DataAccessResourceFailureException("s"));
Health health = dbServiceValidator.health();
assertThat(health.getStatus().getCode())
.isEqualTo(Health.down().build().getStatus().getCode());
}
运行 “何时”抛出异常 java.lang.IllegalArgumentException: RowMapper is required
虽然它与 @MockBean(而不是我想要的 SpyBean)一起工作正常。
为什么它与 mock 一起工作而不与 spy 一起工作?我应该怎么做才能让它与@Spy 一起工作?
P.S。与
相同的行为
when(jdbcTemplate.query(anyString(),any(RowMapper.class)))
.thenThrow(DataAccessException.class);
当您使用 Spring Boot @MockBean 或 @SpyBean 时,两者都是 Spring 感知的。
要了解 Mockito mock 和 spy,请查看 Mockito series from Baeldung, esp. Injecting Mockito Mocks into Spring Beans。
我已经写了 a simple testing code sample 使用 Mockito 和 Spring(不是 Spring 引导),监视真实实例,并通过存根模拟和替换方法.
doNoting
、doAnswer
、doReturn
、doThrow
的用法类似,在stubbing行为上调用这些方法得到return结果再执行间谍对象的方法。
如果您有兴趣,请从我的 github 中查看有关 Mockito 的测试代码示例,例如。 this test.
我正在使用 Spy 而不是 Mock,因为我想要其他方法中的常规功能。 我想在调用 jdbcTemplate 查询时模拟异常。
JdbcTemplate.query 原型是 public <T> List<T> query(String sql, RowMapper<T> rowMapper) throws DataAccessException
我这样称呼它:
jdbcTemplate.query("select 1 from dual", new SingleColumnRowMapper<>());
这是我的间谍贴:
@SpyBean
JdbcTemplate jdbcTemplate;
这是测试:
@Test
void testDbIsDown() {
when(jdbcTemplate.query(anyString(),any(SingleColumnRowMapper.class)))
.thenThrow(new DataAccessResourceFailureException("s"));
Health health = dbServiceValidator.health();
assertThat(health.getStatus().getCode())
.isEqualTo(Health.down().build().getStatus().getCode());
}
运行 “何时”抛出异常 java.lang.IllegalArgumentException: RowMapper is required
虽然它与 @MockBean(而不是我想要的 SpyBean)一起工作正常。
为什么它与 mock 一起工作而不与 spy 一起工作?我应该怎么做才能让它与@Spy 一起工作?
P.S。与
相同的行为when(jdbcTemplate.query(anyString(),any(RowMapper.class)))
.thenThrow(DataAccessException.class);
当您使用 Spring Boot @MockBean 或 @SpyBean 时,两者都是 Spring 感知的。
要了解 Mockito mock 和 spy,请查看 Mockito series from Baeldung, esp. Injecting Mockito Mocks into Spring Beans。
我已经写了 a simple testing code sample 使用 Mockito 和 Spring(不是 Spring 引导),监视真实实例,并通过存根模拟和替换方法.
doNoting
、doAnswer
、doReturn
、doThrow
的用法类似,在stubbing行为上调用这些方法得到return结果再执行间谍对象的方法。
如果您有兴趣,请从我的 github 中查看有关 Mockito 的测试代码示例,例如。 this test.