2017-01-11 11 views
3

Это мой классКак поиздеваться макетом Spring JDBC, когда мы переходим с параметром (RowMapper)

@Repository 
public class JdbcRolesDao implements RolesDao{ 
private JdbcTemplate jdbcTemplate; 

private static final String GET_USER_ROLES_QUERY = "select ROLE_CD from USER_ROLES where USER_ID = ? AND USER_DRCTRY = ?"; 

@Autowired 
public JdbcRolesDao(DataSource dataSource) { 
    this.jdbcTemplate = new JdbcTemplate(dataSource); 
} 

public List<String> getRolesByUser(String userId, String directoryId){ 
    List<String> roles = jdbcTemplate.query(
      GET_USER_ROLES_QUERY , new RoleMapper(), new Object[]{userId, directoryId}); 
    return roles; 
}} 

Это мой тестовый класс,

@RunWith(PowerMockRunner.class) 
@PrepareForTest({JdbcRolesDao.class}) 
public class JdbcRolesDaoTest { 

@Mock 
private DataSource datasource; 

@Mock 
private JdbcTemplate jdbcTemplate; 

private JdbcRolesDao jdbcRolesDao; 

private static AuthenticationResourceTest2 authenticationResourceTest; 

private static final String GET_USER_ROLES_QUERY = "select ROLE_CD from USER_ROLES where USER_ID = ? AND USER_DRCTRY = ?"; 

@BeforeClass 
public static void init(){ 
    authenticationResourceTest = new AuthenticationResourceTest2(); 
} 

@Before 
public void initMocks() throws Exception { 
    MockitoAnnotations.initMocks(this); 
    PowerMockito.whenNew(JdbcTemplate.class).withAnyArguments().thenReturn(jdbcTemplate); 
    jdbcRolesDao = new JdbcRolesDao(datasource); 
} 

@Test 
public void getRolesByUserTest(){ 
    PowerMockito.when(jdbcTemplate.query(anyString(), any(RowMapper.class),any(Object[].class))).thenReturn(authenticationResourceTest.getDummyRoles()); 
    List<String> configList = jdbcRolesDao.getRolesByUser("UserId", "DirectoryId"); 
    if(configList != null) 
     System.out.println("not null "+configList.size()); 
    //assertThat(configList, Matchers.hasSize(1)); 
}} 

Я получаю список с 0 размером, но это должно быть одно.

Когда я удалил информацию Oject [] {} из исходного кода и тестового кода, он отлично работает.

Я где-то не так в насмешливой информации об Oject [], может кто-нибудь, пожалуйста, направить меня.

ответ

0

Вы можете использовать Matchers.anyObject() вместо любого (Object []. Class). (import org.mockito.Matchers;)

+0

Он не работает с Matchers.anyObject() также –

+0

Я пробовал вот так, и он работал, PowerMockito.when (jdbcTemplate.query (Matchers.anyString(), Matchers.any (RowMapper.class), Matchers.anyObject())). ThenReturn (authenticationResourceTest.getDummyRoles()); Единственное различие заключается в том, что у меня нет PowerMockito.whenNew. Я думаю, что это не требуется, поскольку у него уже есть аннотация @Mock – jAvA

 Смежные вопросы

  • Нет связанных вопросов^_^