我一直在尝试对我的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()
进行单元测试,但我还没有找到方法。我很困惑。请有人帮帮我吗?
答案 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文件。希望它可以帮到某人。