/* * Copyright 2002-2008 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.springframework.jdbc.core; import java.math.BigDecimal; import java.sql.Connection; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; import java.sql.Timestamp; import java.sql.Types; import junit.framework.TestCase; import org.easymock.MockControl; import org.apache.commons.logging.LogFactory; import org.springframework.jdbc.core.test.ConcretePerson; import org.springframework.jdbc.core.test.Person; import org.springframework.jdbc.datasource.SingleConnectionDataSource; import org.springframework.jdbc.support.SQLStateSQLExceptionTranslator; /** * Mock object based abstract class for RowMapper tests. * Initializes mock objects and verifies results. * * @author Thomas Risberg */ public abstract class AbstractRowMapperTests extends TestCase { private final boolean debugEnabled = LogFactory.getLog(JdbcTemplate.class).isDebugEnabled(); protected MockControl conControl; protected Connection con; protected MockControl conControl2; protected Connection con2; protected MockControl rsmdControl; protected ResultSetMetaData rsmd; protected MockControl rsControl; protected ResultSet rs; protected MockControl stmtControl; protected Statement stmt; protected JdbcTemplate jdbcTemplate; protected MockControl rsmdControl2; protected ResultSetMetaData rsmd2; protected MockControl rsControl2; protected ResultSet rs2; protected MockControl stmtControl2; protected Statement stmt2; protected JdbcTemplate jdbcTemplate2; protected void setUp() throws SQLException { conControl = MockControl.createControl(Connection.class); con = (Connection) conControl.getMock(); con.isClosed(); conControl.setDefaultReturnValue(false); rsmdControl = MockControl.createControl(ResultSetMetaData.class); rsmd = (ResultSetMetaData)rsmdControl.getMock(); rsmd.getColumnCount(); rsmdControl.setReturnValue(4, 1); rsmd.getColumnLabel(1); rsmdControl.setReturnValue("name", 1); rsmd.getColumnLabel(2); rsmdControl.setReturnValue("age", 1); rsmd.getColumnLabel(3); rsmdControl.setReturnValue("birth_date", 1); rsmd.getColumnLabel(4); rsmdControl.setReturnValue("balance", 1); rsmdControl.replay(); rsControl = MockControl.createControl(ResultSet.class); rs = (ResultSet) rsControl.getMock(); rs.getMetaData(); rsControl.setReturnValue(rsmd, 1); rs.next(); rsControl.setReturnValue(true, 1); rs.getString(1); rsControl.setReturnValue("Bubba", 1); rs.wasNull(); rsControl.setReturnValue(false, 1); rs.getLong(2); rsControl.setReturnValue(22, 1); rs.getTimestamp(3); rsControl.setReturnValue(new Timestamp(1221222L), 1); rs.getBigDecimal(4); rsControl.setReturnValue(new BigDecimal("1234.56"), 1); rs.next(); rsControl.setReturnValue(false, 1); rs.close(); rsControl.setVoidCallable(1); rsControl.replay(); stmtControl = MockControl.createControl(Statement.class); stmt = (Statement) stmtControl.getMock(); con.createStatement(); conControl.setReturnValue(stmt, 1); stmt.executeQuery("select name, age, birth_date, balance from people"); stmtControl.setReturnValue(rs, 1); if (debugEnabled) { stmt.getWarnings(); stmtControl.setReturnValue(null, 1); } stmt.close(); stmtControl.setVoidCallable(1); conControl2 = MockControl.createControl(Connection.class); con2 = (Connection) conControl2.getMock(); con2.isClosed(); conControl2.setDefaultReturnValue(false); rsmdControl2 = MockControl.createControl(ResultSetMetaData.class); rsmd2 = (ResultSetMetaData)rsmdControl2.getMock(); rsmd2.getColumnCount(); rsmdControl2.setReturnValue(4, 2); rsmd2.getColumnLabel(1); rsmdControl2.setReturnValue("name", 2); rsmd2.getColumnLabel(2); rsmdControl2.setReturnValue("age", 2); rsmd2.getColumnLabel(3); rsmdControl2.setReturnValue("birth_date", 1); rsmd2.getColumnLabel(4); rsmdControl2.setReturnValue("balance", 1); rsmdControl2.replay(); rsControl2 = MockControl.createControl(ResultSet.class); rs2 = (ResultSet) rsControl2.getMock(); rs2.getMetaData(); rsControl2.setReturnValue(rsmd2, 2); rs2.next(); rsControl2.setReturnValue(true, 2); rs2.getString(1); rsControl2.setReturnValue("Bubba", 2); rs2.wasNull(); rsControl2.setReturnValue(true, 2); rs2.getLong(2); rsControl2.setReturnValue(0, 2); rs2.getTimestamp(3); rsControl2.setReturnValue(new Timestamp(1221222L), 1); rs2.getBigDecimal(4); rsControl2.setReturnValue(new BigDecimal("1234.56"), 1); rs2.next(); rsControl2.setReturnValue(false, 1); rs2.close(); rsControl2.setVoidCallable(2); rsControl2.replay(); stmtControl2 = MockControl.createControl(Statement.class); stmt2 = (Statement) stmtControl2.getMock(); con2.createStatement(); conControl2.setReturnValue(stmt2, 2); stmt2.executeQuery("select name, null as age, birth_date, balance from people"); stmtControl2.setReturnValue(rs2, 2); if (debugEnabled) { stmt2.getWarnings(); stmtControl2.setReturnValue(null, 2); } stmt2.close(); stmtControl2.setVoidCallable(2); conControl.replay(); stmtControl.replay(); conControl2.replay(); stmtControl2.replay(); jdbcTemplate = new JdbcTemplate(); jdbcTemplate.setDataSource(new SingleConnectionDataSource(con, false)); jdbcTemplate.setExceptionTranslator(new SQLStateSQLExceptionTranslator()); jdbcTemplate.afterPropertiesSet(); jdbcTemplate2 = new JdbcTemplate(); jdbcTemplate2.setDataSource(new SingleConnectionDataSource(con2, false)); jdbcTemplate2.setExceptionTranslator(new SQLStateSQLExceptionTranslator()); jdbcTemplate2.afterPropertiesSet(); } protected void verifyPerson(Person bean) { verify(); assertEquals("Bubba", bean.getName()); assertEquals(22L, bean.getAge()); assertEquals(new java.util.Date(1221222L), bean.getBirth_date()); assertEquals(new BigDecimal("1234.56"), bean.getBalance()); } protected void verifyPersonWithZeroAge(Person bean) { conControl2.verify(); rsControl2.verify(); rsmdControl2.verify(); stmtControl2.verify(); assertEquals("Bubba", bean.getName()); assertEquals(0L, bean.getAge()); assertEquals(new java.util.Date(1221222L), bean.getBirth_date()); assertEquals(new BigDecimal("1234.56"), bean.getBalance()); } protected void verifyConcretePerson(ConcretePerson bean) { verify(); assertEquals("Bubba", bean.getName()); assertEquals(22L, bean.getAge()); assertEquals(new java.util.Date(1221222L), bean.getBirth_date()); assertEquals(new BigDecimal("1234.56"), bean.getBalance()); } private void verify() { conControl.verify(); rsControl.verify(); rsmdControl.verify(); stmtControl.verify(); } }