单元测试DAO

时间:2012-05-04 20:19:46

标签: java testing dao easymock

我一直在尝试对我的DAO进行单元测试,但我还没有找到方法去做,我感觉有点绝望。我有一个看起来像这样的小DAO:

public interface ElectionsDao {
    List<String> getDates();
}

我正在使用Spring框架使用SimpleJdbcTemplate进行DI。我的实现如下:

public class ElectionsDaoImpl extends SimpleJdbcDaoSupport implements ElectionsDao {
    public List<String> getDates() {
        List<String> dates = new ArrayList<String>();
        try {
            dates = getSimpleJdbcTemplate().query("SELECT electiondate FROM electiondate", new StringRowMapper());
        } catch (DataAccessException ex){
            throw new RuntimeException(ex);
        }
        return dates;
    }

    protected static final class StringRowMapper implements ParameterizedRowMapper<String> {
        public String mapRow(ResultSet rs, int line) throws SQLException {
            String string = new String(rs.getString("electiondate"));
            return string;
        }
    }
}

我想要做的只是使用EasyMock对getDates()进行单元测试,但我还没有找到方法。我很困惑。请有人帮帮我吗?

2 个答案:

答案 0 :(得分:3)

看起来getSimpleJdbcTemplate是单元测试的最大问题。您可以测试的一种方法是扩展被测试的类并覆盖getSimpleJdbcTemplate方法,例如

public class ElectionDaoTest {

    /** Class under test */
    private ElectionsDaoImpl dao;

    @Before
    public void setUp() {
        dao = new ElectionsDaoImpl(){
            SimpleJdbcTemplate getSimpleJdbcTemplate(){
                // Return easy mock version here.
            }
        };
    }

    @Test
    // Do tests
}

EasyMock可能有一种更简单的方法,但我对它并不熟悉。

答案 1 :(得分:3)

感谢您的评论。我决定使用Spring进行测试。我的测试代码结束如下:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:beans.xml")
public class DBConectionTest{

    @Resource
    private ElectionsDao electionsDao;

    @Test
    public void testGetDates(){
        List<String> dates = electionsDao.getDates();
        assertNotNull(dates);
    }
}

我正在使用运行项目时使用的相同xml文件。希望它可以帮到某人。