模拟多个 jdbcTemplate.queryForObject 不起作用
mocking multiple jdbcTemplate.queryForObject doesn'twork
我的问题是,如果我 mock jdbcTemplate.queryForObject() 3 次,则只有第一个 mock 可以使其他 2 个 mock return 为 null。这段代码有什么问题?欢迎任何帮助。谢谢
//this works correctly and returns 1
Mockito.when(jdbcTemplate.queryForObject(eq("select count(*) from TEST_TABLE_1"), (MapSqlParameterSource) any(), eq(Integer.class))).thenReturn(1);
//this returns null
Mockito.when(jdbcTemplate.queryForObject(eq("select count(*) from TEST_TABLE_11"),(MapSqlParameterSource) any(), eq(Integer.class))).thenReturn(2);
//this returns null as well
Mockito.when(jdbcTemplate.queryForObject(eq("select count(*) from TEST_TABLE_111"), (MapSqlParameterSource) any(), eq(Integer.class))).thenReturn(3);
'''
你应该模拟一次而不是多次模拟同一个对象,但你不使用结果而是使用方法进行模拟
Mockito.when( jdbcTemplate.queryForObject(any()), (MapSqlParameterSource) any(), eq(Integer.class)))).thenAnswer(new Answer() {
Object answer(InvocationOnMock invocation) {
Object[] args = invocation.getArguments();
Object mock = invocation.getMock();
if(//here you check if test_1 or 11 or...){
return 1;//depending on the arg
}
});
我的问题是,如果我 mock jdbcTemplate.queryForObject() 3 次,则只有第一个 mock 可以使其他 2 个 mock return 为 null。这段代码有什么问题?欢迎任何帮助。谢谢
//this works correctly and returns 1
Mockito.when(jdbcTemplate.queryForObject(eq("select count(*) from TEST_TABLE_1"), (MapSqlParameterSource) any(), eq(Integer.class))).thenReturn(1);
//this returns null
Mockito.when(jdbcTemplate.queryForObject(eq("select count(*) from TEST_TABLE_11"),(MapSqlParameterSource) any(), eq(Integer.class))).thenReturn(2);
//this returns null as well
Mockito.when(jdbcTemplate.queryForObject(eq("select count(*) from TEST_TABLE_111"), (MapSqlParameterSource) any(), eq(Integer.class))).thenReturn(3);
'''
你应该模拟一次而不是多次模拟同一个对象,但你不使用结果而是使用方法进行模拟
Mockito.when( jdbcTemplate.queryForObject(any()), (MapSqlParameterSource) any(), eq(Integer.class)))).thenAnswer(new Answer() {
Object answer(InvocationOnMock invocation) {
Object[] args = invocation.getArguments();
Object mock = invocation.getMock();
if(//here you check if test_1 or 11 or...){
return 1;//depending on the arg
}
});