2013-12-23 2 views
1

Организация - POJO. Вот тестовый класс:JMockit - java.lang.ClassCastException: java.lang.String не может быть передан организации

@Tested 
DAOImpl daoImpl; 

    @Injectable 
    JdbcTemplate mockJdbcTemplate; 

    @Mocked 
    DAO ssoDAO; 

    @Before 
    public void setup() { 
     daoImpl = new DAOImpl(); 
     daoImpl.setJdbcTempate(mockJdbcTemplate); 
    } 

    @Test 
    public void testAddOrg() { 

     final String expectedId = "7c82facc"; 
     final String expectedOrg = "one"; 

     new Expectations() {{ 
      mockJdbcTemplate.queryForObject(DAOImpl.GET__KEY_FOR_ORG_IDS, (DAORowMapper) any, expectedId, expectedKeys); 
      result = expectedKeys; 
     }}; 

     Organization actualKey =daoImpl.addOrg(expectedId, expectedKeys); 
     assertEquals(expectedKeys, actualKey); 
    } 

} 

Вот класс под тест: с помощью метода я тестирование для:

@Repository(value = "dao") 
public class DAOImpl implements DAO { 
    private JdbcTemplate jdbcTemplate; 

    static final String GET_KEY_FOR_ORG_IDS = "select keys from table where id=?"; 

    static final String DATASOURCE_BEAN = "dataSource"; 

    @Autowired 
    public void createTemplate(
      @Qualifier(value = DATASOURCE_BEAN) DataSource dataSource) { 
     this.jdbcTemplate = new JdbcTemplate(dataSource); 
    } 

    public SASOrganization addOrgSASRelationship(String orgIds, String orgKeys) { 
     try { 
      Organization key = jdbcTemplate.queryForObject(GET_KEY_FOR_ORG_IDS, new DAORowMapper(), id, keys); 
      return key; 
     } catch (EmptyResultDataAccessException e) { 
      return null; 
     } 
    } 

    public void setJdbcTempate(JdbcTemplate jdbcTemplate) { 
     this.jdbcTemplate = jdbcTemplate; 
    } 

} 

Вопрос: Я получаю java.lang.ClassCastException.

Как решить эту проблему в этом конкретном коде? Если вы можете предоставить отредактированный код или приятное объяснение.

+0

Почему JMockit? Mockito прост и красив :) – MariuszS

+0

Это требование – Thunder

ответ

0

public Organization addOrg(String orgId, String orgKeys) здесь Я возвращаюсь key типа Organization.

И в тесте,

`mockJdbcTemplate.queryForObject(DAOImpl.GET__KEY_FOR_ORG_IDS, (DAORowMapper) any, expectedId, expectedKeys);` 

, как вы можете увидеть expectedId и expectedKeys, я передаю строку, но он ожидает организации не строки.

Ниже приводится модифицированный класс тест, который работал для меня:

@Test 
    public void testAddOrg() { 

     final Organization expectedOrg = new Organization(); 
     expectedOrgAttr.setId("7c82facc"); 
     expectedOrgAttr.setKeys("one"); 

     new Expectations() {{ 
      mockJdbcTemplate.queryForObject(DAOImpl.GET_KEY_FOR_ORG_IDS, (DAORowMapper) any, expectedOrgAttr.getId(), expectedOrgAttr.getKeys()); 
      result = expectedOrgAttr; 
     }}; 

     Organization actualKey =daoImpl.addOrg(expectedOrgAttr.getId(), expectedOrgAttr.getKeys()); 
     assertEquals(expectedOrgAttr.getId(), actualKey.getId()); 
    } 

Спасибо ребята за быстрый ответ!

0

Я бы использовал withInstanceOf(DAORowMapper.class) вместо (DAORowMapper)any в блоке Ожидания.

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