【问题标题】:Unit test a DAO对 DAO 进行单元测试
【发布时间】:2012-05-14 09:33:34
【问题描述】:

我一直在尝试对我的 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() 进行单元测试,但我还没有找到方法。我很混乱。有人可以帮帮我吗?

【问题讨论】:

  • 您需要使用支持类扩展的最新 EasyMock 来覆盖 getSimpleJdbcTemplate() 的行为,以返回具有为 query 定义的行为的 SimpleJdbcTemplate 的模拟对象。

标签: java testing dao easymock


【解决方案1】:

看起来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 可能有更简单的方法,但我不太熟悉。

【讨论】:

    【解决方案2】:

    感谢您的 cmets。我决定使用 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 文件。希望它可以帮助某人。

    【讨论】:

      猜你喜欢
      • 2021-03-15
      • 2016-03-15
      • 1970-01-01
      • 2020-01-17
      • 2011-07-21
      • 1970-01-01
      • 1970-01-01
      • 2019-11-15
      • 2011-04-11
      相关资源
      最近更新 更多