Added: commons/proper/dbutils/branches/2_0/src/test/java/org/apache/commons/dbutils/InsertExecutorTest.java URL: http://svn.apache.org/viewvc/commons/proper/dbutils/branches/2_0/src/test/java/org/apache/commons/dbutils/InsertExecutorTest.java?rev=1450009&view=auto ============================================================================== --- commons/proper/dbutils/branches/2_0/src/test/java/org/apache/commons/dbutils/InsertExecutorTest.java (added) +++ commons/proper/dbutils/branches/2_0/src/test/java/org/apache/commons/dbutils/InsertExecutorTest.java Tue Feb 26 03:52:37 2013 @@ -0,0 +1,91 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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.apache.commons.dbutils; + +import static org.junit.Assert.assertNotNull; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + + +public class InsertExecutorTest { + + private InsertExecutor executor; + + @Mock private ResultSetHandler<Object> handler; + @Mock private Connection conn; + @Mock private PreparedStatement stmt; + @Mock private ResultSet resultSet; + + @Before + public void setup() throws SQLException { + MockitoAnnotations.initMocks(this); + + when(conn.prepareStatement(any(String.class))).thenReturn(stmt); + when(stmt.getGeneratedKeys()).thenReturn(resultSet); + when(handler.handle(any(ResultSet.class))).thenReturn(new Object()); + } + + protected void createExecutor(String sql) throws Exception { + executor = new InsertExecutor(conn, sql, true); + } + + @Test + public void testGoodSQL() throws Exception { + createExecutor("insert into blah"); + + Object ret = executor.insert(handler); + + assertNotNull(ret); + verify(handler, times(1)).handle(resultSet); + verify(conn, times(1)).close(); + verify(stmt, times(1)).close(); + } + + @Test(expected=SQLException.class) + public void testUnmappedParams() throws Exception { + createExecutor("insert into blah (:something)"); + + Object ret = executor.insert(handler); + + assertNotNull(ret); + verify(handler, times(1)).handle(resultSet); + verify(conn, times(1)).close(); + verify(stmt, times(1)).close(); + } + + @Test(expected=SQLException.class) + public void testNullHandler() throws Exception { + createExecutor("insert into blah"); + + Object ret = executor.insert(null); + + assertNotNull(ret); + verify(handler, times(1)).handle(resultSet); + verify(conn, times(1)).close(); + verify(stmt, times(1)).close(); + } +}
Added: commons/proper/dbutils/branches/2_0/src/test/java/org/apache/commons/dbutils/QueryExecutorTest.java URL: http://svn.apache.org/viewvc/commons/proper/dbutils/branches/2_0/src/test/java/org/apache/commons/dbutils/QueryExecutorTest.java?rev=1450009&view=auto ============================================================================== --- commons/proper/dbutils/branches/2_0/src/test/java/org/apache/commons/dbutils/QueryExecutorTest.java (added) +++ commons/proper/dbutils/branches/2_0/src/test/java/org/apache/commons/dbutils/QueryExecutorTest.java Tue Feb 26 03:52:37 2013 @@ -0,0 +1,91 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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.apache.commons.dbutils; + +import static org.junit.Assert.assertNotNull; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + + +public class QueryExecutorTest { + + private QueryExecutor executor; + + @Mock private ResultSetHandler<Object> handler; + @Mock private Connection conn; + @Mock private PreparedStatement stmt; + @Mock private ResultSet resultSet; + + @Before + public void setup() throws SQLException { + MockitoAnnotations.initMocks(this); + + when(conn.prepareStatement(any(String.class))).thenReturn(stmt); + when(stmt.executeQuery()).thenReturn(resultSet); + when(handler.handle(any(ResultSet.class))).thenReturn(new Object()); + } + + protected void createExecutor(String sql) throws Exception { + executor = new QueryExecutor(conn, sql, true); + } + + @Test + public void testGoodSQL() throws Exception { + createExecutor("insert into blah"); + + Object ret = executor.query(handler); + + assertNotNull(ret); + verify(handler, times(1)).handle(resultSet); + verify(conn, times(1)).close(); + verify(stmt, times(1)).close(); + } + + @Test(expected=SQLException.class) + public void testUnmappedParams() throws Exception { + createExecutor("insert into blah (:something)"); + + Object ret = executor.query(handler); + + assertNotNull(ret); + verify(handler, times(1)).handle(resultSet); + verify(conn, times(1)).close(); + verify(stmt, times(1)).close(); + } + + @Test(expected=SQLException.class) + public void testNullHandler() throws Exception { + createExecutor("insert into blah"); + + Object ret = executor.query(null); + + assertNotNull(ret); + verify(handler, times(1)).handle(resultSet); + verify(conn, times(1)).close(); + verify(stmt, times(1)).close(); + } +} Modified: commons/proper/dbutils/branches/2_0/src/test/java/org/apache/commons/dbutils/QueryRunnerTest.java URL: http://svn.apache.org/viewvc/commons/proper/dbutils/branches/2_0/src/test/java/org/apache/commons/dbutils/QueryRunnerTest.java?rev=1450009&r1=1450008&r2=1450009&view=diff ============================================================================== --- commons/proper/dbutils/branches/2_0/src/test/java/org/apache/commons/dbutils/QueryRunnerTest.java (original) +++ commons/proper/dbutils/branches/2_0/src/test/java/org/apache/commons/dbutils/QueryRunnerTest.java Tue Feb 26 03:52:37 2013 @@ -16,28 +16,13 @@ */ package org.apache.commons.dbutils; -import static org.junit.Assert.fail; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.doThrow; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; +import static org.junit.Assert.assertNotNull; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; - import java.sql.Connection; -import java.sql.ParameterMetaData; -import java.sql.PreparedStatement; -import java.sql.ResultSet; import java.sql.SQLException; -import java.sql.Statement; - import javax.sql.DataSource; - -import org.apache.commons.dbutils.handlers.ArrayHandler; -import org.apache.commons.dbutils.handlers.ScalarHandler; -import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; @@ -46,466 +31,70 @@ import org.mockito.MockitoAnnotations; @SuppressWarnings("boxing") // test code public class QueryRunnerTest { QueryRunner runner; - ArrayHandler handler; @Mock DataSource dataSource; @Mock Connection conn; - @Mock PreparedStatement stmt; - @Mock ParameterMetaData meta; - @Mock ResultSet results; @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); // init the mocks when(dataSource.getConnection()).thenReturn(conn); - when(conn.prepareStatement(any(String.class))).thenReturn(stmt); - when(stmt.getParameterMetaData()).thenReturn(meta); - when(stmt.getResultSet()).thenReturn(results); - when(stmt.executeQuery()).thenReturn(results); - when(results.next()).thenReturn(false); - - handler = new ArrayHandler(); - runner = new QueryRunner(dataSource); - } - - // - // Batch test cases - // - - private void callGoodBatch(Connection conn, Object[][] params) throws Exception { - when(meta.getParameterCount()).thenReturn(2); - runner.batch(conn, "select * from blah where ? = ?", params); - - verify(stmt, times(2)).addBatch(); - verify(stmt, times(1)).executeBatch(); - verify(stmt, times(1)).close(); // make sure we closed the statement - verify(conn, times(0)).close(); // make sure we closed the connection - } - - private void callGoodBatch(Object[][] params) throws Exception { - when(meta.getParameterCount()).thenReturn(2); - runner.batch("select * from blah where ? = ?", params); - - verify(stmt, times(2)).addBatch(); - verify(stmt, times(1)).executeBatch(); - verify(stmt, times(1)).close(); // make sure we closed the statement - verify(conn, times(1)).close(); // make sure we closed the connection - } - - @Test - public void testGoodBatch() throws Exception { - String[][] params = new String[][] { { "unit", "unit" }, { "test", "test" } }; - - callGoodBatch(params); - } - - @Test - public void testGoodBatchPmdTrue() throws Exception { - runner = new QueryRunner(dataSource, true); - String[][] params = new String[][] { { "unit", "unit" }, { "test", "test" } }; - - callGoodBatch(params); - } - - @Test - public void testGoodBatchDefaultConstructor() throws Exception { - runner = new QueryRunner(); - String[][] params = new String[][] { { "unit", "unit" }, { "test", "test" } }; - - callGoodBatch(conn, params); - } - - @Test - public void testNullParamsBatch() throws Exception { - String[][] params = new String[][] { { null, "unit" }, { "test", null } }; - - callGoodBatch(params); - } - - - - // helper method for calling batch when an exception is expected - private void callBatchWithException(String sql, Object[][] params) throws Exception { - boolean caught = false; - - try { - runner.batch(sql, params); - - verify(stmt, times(2)).addBatch(); - verify(stmt, times(1)).executeBatch(); - verify(stmt, times(1)).close(); // make sure the statement is closed - verify(conn, times(1)).close(); // make sure the connection is closed - } catch(SQLException e) { - caught = true; - } - - if(!caught) - fail("Exception never thrown, but expected"); - } - - @Test - public void testTooFewParamsBatch() throws Exception { - String[][] params = new String[][] { { "unit" }, { "test" } }; - - callBatchWithException("select * from blah where ? = ?", params); - } - - @Test - public void testTooManyParamsBatch() throws Exception { - String[][] params = new String[][] { { "unit", "unit", "unit" }, { "test", "test", "test" } }; - - callBatchWithException("select * from blah where ? = ?", params); - } - - @Test(expected=SQLException.class) - public void testNullConnectionBatch() throws Exception { - String[][] params = new String[][] { { "unit", "unit" }, { "test", "test" } }; - - when(meta.getParameterCount()).thenReturn(2); - when(dataSource.getConnection()).thenReturn(null); - - runner.batch("select * from blah where ? = ?", params); - } - - @Test(expected=SQLException.class) - public void testNullSqlBatch() throws Exception { - String[][] params = new String[][] { { "unit", "unit" }, { "test", "test" } }; - - when(meta.getParameterCount()).thenReturn(2); - - runner.batch(null, params); - } - - @Test(expected=SQLException.class) - public void testNullParamsArgBatch() throws Exception { - when(meta.getParameterCount()).thenReturn(2); - - runner.batch("select * from blah where ? = ?", null); - } - - @Test - public void testAddBatchException() throws Exception { - String[][] params = new String[][] { { "unit", "unit" }, { "test", "test" } }; - - doThrow(new SQLException()).when(stmt).addBatch(); - - callBatchWithException("select * from blah where ? = ?", params); - } - - @Test - public void testExecuteBatchException() throws Exception { - String[][] params = new String[][] { { "unit", "unit" }, { "test", "test" } }; - - doThrow(new SQLException()).when(stmt).executeBatch(); - - callBatchWithException("select * from blah where ? = ?", params); - } - - - // - // Query test cases - // - private void callGoodQuery(Connection conn) throws Exception { - when(meta.getParameterCount()).thenReturn(2); - runner.query(conn, "select * from blah where ? = ?", handler, "unit", "test"); - - verify(stmt, times(1)).executeQuery(); - verify(results, times(1)).close(); - verify(stmt, times(1)).close(); // make sure we closed the statement - verify(conn, times(0)).close(); // make sure we closed the connection - - // call the other variation of query - when(meta.getParameterCount()).thenReturn(0); - runner.query(conn, "select * from blah", handler); - - verify(stmt, times(2)).executeQuery(); - verify(results, times(2)).close(); - verify(stmt, times(2)).close(); // make sure we closed the statement - verify(conn, times(0)).close(); // make sure we closed the connection - } - - private void callGoodQuery() throws Exception { - when(meta.getParameterCount()).thenReturn(2); - runner.query("select * from blah where ? = ?", handler, "unit", "test"); - - verify(stmt, times(1)).executeQuery(); - verify(results, times(1)).close(); - verify(stmt, times(1)).close(); // make sure we closed the statement - verify(conn, times(1)).close(); // make sure we closed the connection - - // call the other variation of query - when(meta.getParameterCount()).thenReturn(0); - runner.query("select * from blah", handler); - - verify(stmt, times(2)).executeQuery(); - verify(results, times(2)).close(); - verify(stmt, times(2)).close(); // make sure we closed the statement - verify(conn, times(2)).close(); // make sure we closed the connection - } - - @Test - public void testGoodQuery() throws Exception { - callGoodQuery(); - } - - @Test - public void testGoodQueryPmdTrue() throws Exception { - runner = new QueryRunner(true); - callGoodQuery(conn); - } - - @Test - public void testGoodQueryDefaultConstructor() throws Exception { - runner = new QueryRunner(); - callGoodQuery(conn); + runner = new QueryRunner(dataSource); } - - - // helper method for calling batch when an exception is expected - private void callQueryWithException(Object... params) throws Exception { - boolean caught = false; - - try { - when(meta.getParameterCount()).thenReturn(2); - runner.query("select * from blah where ? = ?", handler, params); - - verify(stmt, never()).close(); // make sure the statement is still open - verify(stmt, times(1)).executeQuery(); - verify(results, times(1)).close(); - verify(stmt, times(1)).close(); // make sure we closed the statement - verify(conn, times(1)).close(); // make sure we closed the connection - } catch(SQLException e) { - caught = true; - } - - if(!caught) - fail("Exception never thrown, but expected"); - } - - @Test - public void testNoParamsQuery() throws Exception { - callQueryWithException(); - } - - @Test - public void testTooFewParamsQuery() throws Exception { - callQueryWithException("unit"); - } - - @Test - public void testTooManyParamsQuery() throws Exception { - callQueryWithException("unit", "test", "fail"); - } - - @Test(expected=SQLException.class) - public void testNullConnectionQuery() throws Exception { - when(meta.getParameterCount()).thenReturn(2); - when(dataSource.getConnection()).thenReturn(null); - - runner.query("select * from blah where ? = ?", handler, "unit", "test"); - } - - @Test(expected=SQLException.class) - public void testNullSqlQuery() throws Exception { - when(meta.getParameterCount()).thenReturn(2); - - runner.query(null, handler); - } - - @Test(expected=SQLException.class) - public void testNullHandlerQuery() throws Exception { - when(meta.getParameterCount()).thenReturn(2); - - runner.query("select * from blah where ? = ?", null); - } - - @Test - public void testExecuteQueryException() throws Exception { - doThrow(new SQLException()).when(stmt).executeQuery(); - - callQueryWithException(handler, "unit", "test"); - } - - - // - // Update test cases - // - private void callGoodUpdate(Connection conn) throws Exception { - when(meta.getParameterCount()).thenReturn(2); - runner.update(conn, "update blah set ? = ?", "unit", "test"); - - verify(stmt, times(1)).executeUpdate(); - verify(stmt, times(1)).close(); // make sure we closed the statement - verify(conn, times(0)).close(); // make sure we closed the connection - - // call the other variation - when(meta.getParameterCount()).thenReturn(0); - runner.update(conn, "update blah set unit = test"); - - verify(stmt, times(2)).executeUpdate(); - verify(stmt, times(2)).close(); // make sure we closed the statement - verify(conn, times(0)).close(); // make sure we closed the connection - - // call the other variation - when(meta.getParameterCount()).thenReturn(1); - runner.update(conn, "update blah set unit = ?", "test"); - - verify(stmt, times(3)).executeUpdate(); - verify(stmt, times(3)).close(); // make sure we closed the statement - verify(conn, times(0)).close(); // make sure we closed the connection - } - - private void callGoodUpdate() throws Exception { - when(meta.getParameterCount()).thenReturn(2); - runner.update("update blah set ? = ?", "unit", "test"); - - verify(stmt, times(1)).executeUpdate(); - verify(stmt, times(1)).close(); // make sure we closed the statement - verify(conn, times(1)).close(); // make sure we closed the connection - - // call the other variation - when(meta.getParameterCount()).thenReturn(0); - runner.update("update blah set unit = test"); - - verify(stmt, times(2)).executeUpdate(); - verify(stmt, times(2)).close(); // make sure we closed the statement - verify(conn, times(2)).close(); // make sure we closed the connection - - // call the other variation - when(meta.getParameterCount()).thenReturn(1); - runner.update("update blah set unit = ?", "test"); - - verify(stmt, times(3)).executeUpdate(); - verify(stmt, times(3)).close(); // make sure we closed the statement - verify(conn, times(3)).close(); // make sure we closed the connection - } - + + // query tests + @Test - public void testGoodUpdate() throws Exception { - callGoodUpdate(); + public void testQuerySQL() throws SQLException { + assertNotNull(runner.query("select * from blah where :first=first")); + verify(dataSource, times(1)).getConnection(); } - + @Test - public void testGoodUpdatePmdTrue() throws Exception { - runner = new QueryRunner(true); - callGoodUpdate(conn); + public void testQueryConnSQL() throws SQLException { + assertNotNull(runner.query(conn, "select * from blah where :first=first")); } - + @Test - public void testGoodUpdateDefaultConstructor() throws Exception { - runner = new QueryRunner(); - callGoodUpdate(conn); + public void testQueryConnSQLBoolean() throws SQLException { + assertNotNull(runner.query(conn, true, "select * from blah where :first=first")); } + // insert tests + @Test - public void testGoodInsert() throws Exception { - results = mock(ResultSet.class); - - when(meta.getParameterCount()).thenReturn(2); - when(conn.prepareStatement(any(String.class), eq(Statement.RETURN_GENERATED_KEYS))).thenReturn(stmt); - when(stmt.getGeneratedKeys()).thenReturn(results); - when(results.next()).thenReturn(true).thenReturn(false); - when(results.getObject(1)).thenReturn(1L); - - Long generatedKey = runner.insert("INSERT INTO blah(col1, col2) VALUES(?,?)", new ScalarHandler<Long>(), "unit", "test"); - - verify(stmt, times(1)).executeUpdate(); - verify(stmt, times(1)).close(); // make sure we closed the statement - verify(conn, times(1)).close(); // make sure we closed the connection - - Assert.assertEquals(1L, generatedKey.longValue()); + public void testInsertSQL() throws SQLException { + assertNotNull(runner.insert("insert * from blah where :first=first")); + verify(dataSource, times(1)).getConnection(); } - - // helper method for calling batch when an exception is expected - private void callUpdateWithException(Object... params) throws Exception { - boolean caught = false; - - try { - when(meta.getParameterCount()).thenReturn(2); - runner.update("select * from blah where ? = ?", params); - - verify(stmt, times(1)).executeUpdate(); - verify(stmt, times(1)).close(); // make sure we closed the statement - verify(conn, times(1)).close(); // make sure we closed the connection - } catch(SQLException e) { - caught = true; - } - - if(!caught) - fail("Exception never thrown, but expected"); - } - + @Test - public void testNoParamsUpdate() throws Exception { - callUpdateWithException(); + public void testInsertConnSQL() throws SQLException { + assertNotNull(runner.insert(conn, "insert * from blah where :first=first")); } - + @Test - public void testTooFewParamsUpdate() throws Exception { - callUpdateWithException("unit"); + public void testInsertConnSQLBoolean() throws SQLException { + assertNotNull(runner.insert(conn, true, "insert * from blah where :first=first")); } - + + // update tests + @Test - public void testTooManyParamsUpdate() throws Exception { - callUpdateWithException("unit", "test", "fail"); - } - - @Test(expected=SQLException.class) - public void testNullConnectionUpdate() throws Exception { - when(meta.getParameterCount()).thenReturn(2); - when(dataSource.getConnection()).thenReturn(null); - - runner.update("select * from blah where ? = ?", "unit", "test"); - } - - @Test(expected=SQLException.class) - public void testNullSqlUpdate() throws Exception { - when(meta.getParameterCount()).thenReturn(2); - - runner.update(null); + public void testUpdateSQL() throws SQLException { + assertNotNull(runner.update("select * from blah where :first=first")); + verify(dataSource, times(1)).getConnection(); } - + @Test - public void testExecuteUpdateException() throws Exception { - doThrow(new SQLException()).when(stmt).executeUpdate(); - - callUpdateWithException("unit", "test"); + public void testUpdateConnSQL() throws SQLException { + assertNotNull(runner.update(conn, "select * from blah where :first=first")); } - - // - // Random tests - // - class MyBean { - private int a; - private double b; - private String c; - - public int getA() { return a; } - public void setA(int a) { this.a = a; } - public double getB() { return b; } - public void setB(double b) { this.b = b; } - public String getC() { return c; } - public void setC(String c) { this.c = c; } - } - + @Test - public void testFillStatementWithBean() throws Exception { - MyBean bean = new MyBean(); - when(meta.getParameterCount()).thenReturn(3); - runner.fillStatementWithBean(stmt, bean, new String[] { "a", "b", "c" }); - } - - @Test(expected=NullPointerException.class) - public void testFillStatementWithBeanNullNames() throws Exception { - MyBean bean = new MyBean(); - when(meta.getParameterCount()).thenReturn(3); - runner.fillStatementWithBean(stmt, bean, new String[] { "a", "b", null }); - } - - @Test(expected=SQLException.class) - public void testBadPrepareConnection() throws Exception { - runner = new QueryRunner(); - runner.update("update blah set unit = test"); + public void testUpdateConnSQLBoolean() throws SQLException { + assertNotNull(runner.update(conn, true, "select * from blah where :first=first")); } + } Added: commons/proper/dbutils/branches/2_0/src/test/java/org/apache/commons/dbutils/UpdateExecutorTest.java URL: http://svn.apache.org/viewvc/commons/proper/dbutils/branches/2_0/src/test/java/org/apache/commons/dbutils/UpdateExecutorTest.java?rev=1450009&view=auto ============================================================================== --- commons/proper/dbutils/branches/2_0/src/test/java/org/apache/commons/dbutils/UpdateExecutorTest.java (added) +++ commons/proper/dbutils/branches/2_0/src/test/java/org/apache/commons/dbutils/UpdateExecutorTest.java Tue Feb 26 03:52:37 2013 @@ -0,0 +1,76 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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.apache.commons.dbutils; + +import static org.junit.Assert.assertNotNull; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + + +public class UpdateExecutorTest { + + private UpdateExecutor executor; + + @Mock private Connection conn; + @Mock private PreparedStatement stmt; + @Mock private ResultSet resultSet; + + @Before + public void setup() throws SQLException { + MockitoAnnotations.initMocks(this); + + when(conn.prepareStatement(any(String.class))).thenReturn(stmt); + when(stmt.executeQuery()).thenReturn(resultSet); + } + + protected void createExecutor(String sql) throws Exception { + executor = new UpdateExecutor(conn, sql, true); + } + + @Test + public void testGoodSQL() throws Exception { + createExecutor("insert into blah"); + + Object ret = executor.update(); + + assertNotNull(ret); + verify(conn, times(1)).close(); + verify(stmt, times(1)).close(); + } + + @Test(expected=SQLException.class) + public void testUnmappedParams() throws Exception { + createExecutor("insert into blah (:something)"); + + Object ret = executor.update(); + + assertNotNull(ret); + verify(conn, times(1)).close(); + verify(stmt, times(1)).close(); + } + +}