Code:
<<DaoImpl.java>>
public class DAOImpl extends JdbcDaoSupport implements DAO {
public static final String SELECT_QUERY =
"select * from TABLE_NAME where id = ?";
private static final Logger logger = Logger.getLogger(DAOImpl.class);
public ResultSetExtractor resultSetExtractorImpl;
public DAOImpl() {
resultSetExtractorImpl = new ResultSetExtractorImpl();
}
@Transactional(propagation=Propagation.REQUIRED, readOnly=true)
@SuppressWarnings("unchecked")
public Map<String, Map<String, BigInteger>> getWorkingFields(String id) throws Exception {
Map<String, Map<String, BigInteger>> map = null;
try {
map = (Map<String, Map<String, BigInteger>>)getJdbcTemplate().query(SELECT_QUERY, new Object[] {id}, resultSetExtractorImpl);
} catch (Exception exp) {
logger.error("SQLException caught while extracting Data for id, " + id +" and Exception is:"+exp);
throw exp;
}
return map;
}
class ResultSetExtractorImpl implements ResultSetExtractor {
public Map<String, Map<String, BigInteger>> extractData(ResultSet rs) throws SQLException,
DataAccessException {
Map<String, Map<String, BigInteger>> map = new HashMap<String, Map<String, BigInteger>>();
try {
while (rs.next()) {
...
}
} catch (SQLException exp) {
logger.error("SQLException caught while extracting Data, ", exp);
throw exp;
} catch (DataAccessException exp) {
logger.error("DataAccessException caught while extracting Data, ", exp);
throw exp;
}
return map;
}
}
}
<<DaoImplTest.java>>
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.expectLastCall;
import static org.easymock.classextension.EasyMock.createMock;
import static org.easymock.classextension.EasyMock.replay;
import static org.easymock.classextension.EasyMock.verify;
import java.math.BigInteger;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.HashMap;
import java.util.Map;
import javax.sql.DataSource;
import junit.framework.TestCase;
import org.junit.Before;
import org.junit.Test;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.ResultSetExtractor;
public class DAOImplTest extends TestCase {
public static String PENDING = PENDING;
public static String ID_REF = "idref";
public static String ORDER_ID = "id";
private DAOImpl daoImpl;
private Map<String, Map<String, BigInteger>> map;
private ResultSetExtractor mockResultSetExtractor;
private JdbcTemplate jdbcTemplate;
private DataSource mockDataSource;
private Connection mockConnection;
private ResultSet mockResultSet;
private PreparedStatement mockPrepareStatement;
private static String id = "65";
@Before
public void setUp() throws Exception{
super.setUp();
daoImpl = new DAOImpl();
mockDataSource = createMock(DataSource.class);
mockConnection = createMock(Connection.class);
mockResultSet = createMock(ResultSet.class);
mockPrepareStatement = createMock(PreparedStatement.class);
jdbcTemplate = new JdbcTemplate(mockDataSource);
mockResultSetExtractor = createMock(ResultSetExtractor.class);
daoImpl.setJdbcTemplate(jdbcTemplate);
daoImpl.resultSetExtractorImpl = mockResultSetExtractor;
map = new HashMap<String, Map<String, BigInteger>>();
Map<String, BigInteger> values = new HashMap<String, BigInteger>();
values.put(DAO.PENDING, new BigInteger("123456"));
map.put(DAO.PENDING, values);
}
@SuppressWarnings("unchecked")
@Test
public void testExtractData() throws Exception {
ResultSet mockResultSet = createMock(ResultSet.class);
expect(mockResultSetExtractor.extractData(mockResultSet)).andReturn(map);
replay(mockResultSet, mockResultSetExtractor);
Object retVal = daoImpl.resultSetExtractorImpl.extractData(mockResultSet);
assertEquals(map.getClass(), retVal.getClass());
Map<String, Map<String, BigInteger>> result = (Map<String, Map<String, BigInteger>>)retVal;
assertEquals(map, result);
verify(mockResultSet, mockResultSetExtractor);
}
@Test
public void testGetNoOrders() throws Exception {
expect(mockDataSource.getConnection()).andReturn(mockConnection);
expect(mockConnection.prepareStatement(DAOImpl.SELECT_QUERY)).andReturn(mockPrepareStatement);
mockPrepareStatement.setString(1, id);
expectLastCall().times(1);
expect(mockPrepareStatement.getWarnings()).andReturn(null);
expect(mockPrepareStatement.executeQuery()).andReturn(null);
expect(mockResultSetExtractor.extractData(null)).andReturn(null);
replay(mockResultSet, mockPrepareStatement, mockConnection, mockDataSource, mockResultSetExtractor);
Map<String, Map<String, BigInteger>> result = daoImpl.getWorkingFields(id);
assertEquals(null, result);
verify(mockResultSet, mockPrepareStatement, mockConnection, mockDataSource, mockResultSetExtractor);
}
@Test
public void testGetWorkingOrders() throws Exception {
expect(mockDataSource.getConnection()).andReturn(mockConnection);
expect(mockConnection.prepareStatement(DAOImpl.SELECT_QUERY)).andReturn(mockPrepareStatement);
mockPrepareStatement.setString(1, id);
expectLastCall().times(1);
expect(mockPrepareStatement.getWarnings()).andReturn(null);
expect(mockPrepareStatement.executeQuery()).andReturn(mockResultSet);
expect(mockResultSetExtractor.extractData(mockResultSet)).andReturn(map);
replay(mockResultSet, mockPrepareStatement, mockConnection, mockDataSource, mockResultSetExtractor);
Map<String, Map<String, BigInteger>> result = daoImpl.getWorkingFields(id);
assertEquals(map, result);
verify(mockResultSet, mockPrepareStatement, mockConnection, mockDataSource, mockResultSetExtractor);
}
}