4

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

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

我正在使用 Spring 框架使用SimpleJdbcTemplate. 我的实现如下所示:

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

我想做的只是getDates()使用 EasyMock 的单元测试,但我还没有找到方法。我很混乱。有人可以帮我吗?

4

2 回答 2

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 可能有更简单的方法,但我对它不是很熟悉。

于 2012-05-04T20:32:57.190 回答
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 文件。希望它可以帮助某人。

于 2012-05-07T14:21:07.927 回答