4

私は自分の DAO の単体テストをしようとしてきましたが、まだその方法を見つけられず、少し必死になっています。次のような小さなDAOがあります。

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

私はSpringフレームワークを使用してDIを使用してい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

コメントしてくださってありがとうございます。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 に答える
3

getSimpleJdbcTemplate単体テストの最大の問題のようです。テストする方法の 1 つは、テスト対象のクラスを拡張し、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 に答える