Organization is a POJO. Here is the test class:

@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);
    }

}

Here is the class under test: with the method I am testing for:

@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;
    }

}

Question: I am getting java.lang.ClassCastException.

How do I resolve that in this particular code? If you could provide an edited code or a nice explanation.

有帮助吗?

解决方案 2

public Organization addOrg(String orgId, String orgKeys) here I am returning key of type Organization.

And in the test,

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

as you can see the expectedId and expectedKeys, I am passing String but it's expecting Organization not the String.

The following is the modified test class that worked for me:

@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());
    }

Thank you guys for the quick responses!

其他提示

I would use withInstanceOf(DAORowMapper.class) instead of (DAORowMapper)any in the Expectations block.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top