📄 jdbctemplatetestsuite.java
字号:
ctrlPreparedStatement.verify();
}
public void testCouldntClose() throws Exception {
MockControl ctrlStatement = MockControl.createControl(Statement.class);
Statement mockStatement = (Statement) ctrlStatement.getMock();
MockControl ctrlResultSet = MockControl.createControl(ResultSet.class);
ResultSet mockResultSet = (ResultSet) ctrlResultSet.getMock();
mockConnection.createStatement();
ctrlConnection.setReturnValue(mockStatement);
String sql = "SELECT ID, FORENAME FROM CUSTMR WHERE ID < 3";
mockStatement.executeQuery(sql);
ctrlStatement.setReturnValue(mockResultSet);
mockResultSet.next();
ctrlResultSet.setReturnValue(false);
SQLException sex = new SQLException("bar");
mockResultSet.close();
ctrlResultSet.setThrowable(sex);
mockStatement.getWarnings();
ctrlStatement.setReturnValue(null);
mockStatement.close();
ctrlStatement.setThrowable(sex);
mockConnection.close();
ctrlConnection.setThrowable(sex);
ctrlStatement.replay();
ctrlResultSet.replay();
replay();
JdbcTemplate template2 = new JdbcTemplate(mockDataSource);
RowCountCallbackHandler rcch = new RowCountCallbackHandler();
template2.query("SELECT ID, FORENAME FROM CUSTMR WHERE ID < 3", rcch);
ctrlStatement.verify();
ctrlResultSet.verify();
}
/**
* Mock objects allow us to produce warnings at will
*/
public void testFatalWarning() throws Exception {
String sql = "SELECT forename from custmr";
SQLWarning warnings = new SQLWarning("My warning");
MockControl ctrlResultSet = MockControl.createControl(ResultSet.class);
ResultSet mockResultSet = (ResultSet) ctrlResultSet.getMock();
mockResultSet.next();
ctrlResultSet.setReturnValue(false);
mockResultSet.close();
ctrlResultSet.setVoidCallable();
MockControl ctrlStatement = MockControl.createControl(PreparedStatement.class);
PreparedStatement mockStatement = (PreparedStatement) ctrlStatement.getMock();
mockStatement.executeQuery(sql);
ctrlStatement.setReturnValue(mockResultSet);
mockStatement.getWarnings();
ctrlStatement.setReturnValue(warnings);
mockStatement.close();
ctrlStatement.setVoidCallable();
mockConnection.createStatement();
ctrlConnection.setReturnValue(mockStatement);
ctrlResultSet.replay();
ctrlStatement.replay();
replay();
JdbcTemplate t = new JdbcTemplate(mockDataSource);
t.setIgnoreWarnings(false);
try {
t.query(sql, new RowCallbackHandler() {
public void processRow(java.sql.ResultSet rs)
throws java.sql.SQLException {
rs.getByte(1);
}
});
fail("Should have thrown exception on warning");
}
catch (SQLWarningException ex) {
// Pass
assertTrue(
"Root cause of warning was correct",
ex.getCause() == warnings);
}
ctrlResultSet.verify();
ctrlStatement.verify();
}
public void testIgnoredWarning() throws Exception {
String sql = "SELECT forename from custmr";
SQLWarning warnings = new SQLWarning("My warning");
MockControl ctrlResultSet = MockControl.createControl(ResultSet.class);
ResultSet mockResultSet = (ResultSet) ctrlResultSet.getMock();
mockResultSet.next();
ctrlResultSet.setReturnValue(false);
mockResultSet.close();
ctrlResultSet.setVoidCallable();
MockControl ctrlStatement =
MockControl.createControl(PreparedStatement.class);
PreparedStatement mockStatement =
(PreparedStatement) ctrlStatement.getMock();
mockStatement.executeQuery(sql);
ctrlStatement.setReturnValue(mockResultSet);
mockStatement.getWarnings();
ctrlStatement.setReturnValue(warnings);
mockStatement.close();
ctrlStatement.setVoidCallable();
mockConnection.createStatement();
ctrlConnection.setReturnValue(mockStatement);
ctrlResultSet.replay();
ctrlStatement.replay();
replay();
// Too long: truncation
JdbcTemplate template = new JdbcTemplate(mockDataSource);
template.setIgnoreWarnings(true);
template.query(sql, new RowCallbackHandler() {
public void processRow(java.sql.ResultSet rs)
throws java.sql.SQLException {
rs.getByte(1);
}
});
ctrlResultSet.verify();
ctrlStatement.verify();
}
/**
* Test that we see an SQLException translated using Error Code
*/
public void testSQLErrorCodeTranslation() throws Exception {
final SQLException sex = new SQLException("I have a known problem", "99999", 1054);
final String sql = "SELECT ID FROM CUSTOMER";
MockControl ctrlResultSet = MockControl.createControl(ResultSet.class);
ResultSet mockResultSet = (ResultSet) ctrlResultSet.getMock();
mockResultSet.next();
ctrlResultSet.setReturnValue(true);
mockResultSet.close();
ctrlResultSet.setVoidCallable();
MockControl ctrlStatement = MockControl.createControl(PreparedStatement.class);
PreparedStatement mockStatement = (PreparedStatement) ctrlStatement.getMock();
mockStatement.executeQuery(sql);
ctrlStatement.setReturnValue(mockResultSet);
mockStatement.close();
ctrlStatement.setVoidCallable();
MockControl ctrlDatabaseMetaData = MockControl.createControl(DatabaseMetaData.class);
DatabaseMetaData mockDatabaseMetaData = (DatabaseMetaData) ctrlDatabaseMetaData.getMock();
mockDatabaseMetaData.getDatabaseProductName();
ctrlDatabaseMetaData.setReturnValue("MySQL");
mockDatabaseMetaData.getDriverVersion();
ctrlDatabaseMetaData.setReturnValue("1.2.3");
mockConnection.createStatement();
ctrlConnection.setReturnValue(mockStatement);
mockConnection.getMetaData();
ctrlConnection.setReturnValue(mockDatabaseMetaData);
ctrlResultSet.replay();
ctrlStatement.replay();
ctrlDatabaseMetaData.replay();
replay();
JdbcTemplate template = new JdbcTemplate(mockDataSource);
try {
template.query(sql, new RowCallbackHandler() {
public void processRow(java.sql.ResultSet rs) throws SQLException {
throw sex;
}
});
fail("Should have thrown exception");
}
catch (BadSqlGrammarException ex) {
assertTrue("Wanted same exception back, not " + ex, sex == ex.getCause());
}
catch (Exception ex) {
fail("Should have thrown BadSqlGrammarException exception, not " + ex);
}
ctrlResultSet.verify();
ctrlStatement.verify();
}
/**
* Test that we see an SQLException translated using Error Code.
* If we provide the SQLExceptionTranslator, we shouldn't use a connection
* to get the metadata
*/
public void testUseCustomSQLErrorCodeTranslator() throws Exception {
// Bad SQL state
final SQLException sex = new SQLException("I have a known problem", "07000", 1054);
final String sql = "SELECT ID FROM CUSTOMER";
MockControl ctrlResultSet = MockControl.createControl(ResultSet.class);
ResultSet mockResultSet = (ResultSet) ctrlResultSet.getMock();
mockResultSet.next();
ctrlResultSet.setReturnValue(true);
mockResultSet.close();
ctrlResultSet.setVoidCallable();
MockControl ctrlStatement = MockControl.createControl(PreparedStatement.class);
PreparedStatement mockStatement = (PreparedStatement) ctrlStatement.getMock();
mockStatement.executeQuery(sql);
ctrlStatement.setReturnValue(mockResultSet);
mockStatement.close();
ctrlStatement.setVoidCallable();
mockConnection.createStatement();
ctrlConnection.setReturnValue(mockStatement);
// Change behaviour in setUp() because we only expect one call to getConnection():
// none is necessary to get metadata for exception translator
ctrlConnection = MockControl.createControl(Connection.class);
mockConnection = (Connection) ctrlConnection.getMock();
mockConnection.createStatement();
ctrlConnection.setReturnValue(mockStatement, 1);
mockConnection.close();
ctrlConnection.setVoidCallable(1);
ctrlConnection.replay();
ctrlDataSource = MockControl.createControl(DataSource.class);
mockDataSource = (DataSource) ctrlDataSource.getMock();
mockDataSource.getConnection();
ctrlDataSource.setReturnValue(mockConnection, 1);
ctrlDataSource.replay();
///// end changed behaviour
ctrlResultSet.replay();
ctrlStatement.replay();
JdbcTemplate template = new JdbcTemplate();
template.setDataSource(mockDataSource);
// Set custom exception translator
template.setExceptionTranslator(new SQLStateSQLExceptionTranslator());
template.afterPropertiesSet();
try {
template.query(sql, new RowCallbackHandler() {
public void processRow(java.sql.ResultSet rs)
throws SQLException {
throw sex;
}
});
fail("Should have thrown exception");
}
catch (BadSqlGrammarException ex) {
assertTrue(
"Wanted same exception back, not " + ex,
sex == ex.getCause());
}
ctrlResultSet.verify();
ctrlStatement.verify();
// We didn't call superclass replay() so we need to check these ourselves
ctrlDataSource.verify();
ctrlConnection.verify();
}
public void testNativeJdbcExtractorInvoked() throws Exception {
MockControl ctrlResultSet = MockControl.createControl(ResultSet.class);
final ResultSet mockResultSet = (ResultSet) ctrlResultSet.getMock();
mockResultSet.close();
ctrlResultSet.setVoidCallable(2);
MockControl ctrlStatement = MockControl.createControl(Statement.class);
final Statement mockStatement = (Statement) ctrlStatement.getMock();
mockStatement.getWarnings();
ctrlStatement.setReturnValue(null);
mockStatement.close();
ctrlStatement.setVoidCallable();
MockControl ctrlStatement2 = MockControl.createControl(Statement.class);
final Statement mockStatement2 = (Statement) ctrlStatement2.getMock();
mockStatement2.executeQuery("my query");
ctrlStatement2.setReturnValue(mockResultSet, 1);
MockControl ctrlPreparedStatement = MockControl.createControl(PreparedStatement.class);
final PreparedStatement mockPreparedStatement = (PreparedStatement) ctrlPreparedStatement.getMock();
mockPreparedStatement.getWarnings();
ctrlPreparedStatement.setReturnValue(null);
mockPreparedStatement.close();
ctrlPreparedStatement.setVoidCallable();
MockControl ctrlPreparedStatement2 = MockControl.createControl(PreparedStatement.class);
final PreparedStatement mockPreparedStatement2 = (PreparedStatement) ctrlPreparedStatement2.getMock();
mockPreparedStatement2.executeQuery();
ctrlPreparedStatement2.setReturnValue(mockResultSet, 1);
MockControl ctrlCallableStatement = MockControl.createControl(CallableStatement.class);
final CallableStatement mockCallableStatement = (CallableStatement) ctrlCallableStatement.getMock();
mockCallableStatement.getWarnings();
ctrlCallableStatement.setReturnValue(null);
mockCallableStatement.close();
ctrlCallableStatement.setVoidCallable();
MockControl ctrlCallableStatement2 = MockControl.createControl(CallableStatement.class);
final CallableStatement mockCallableStatement2 = (CallableStatement) ctrlCallableStatement2.getMock();
mockCallableStatement2.execute();
ctrlCallableStatement2.setReturnValue(true);
mockCallableStatement2.getUpdateCount();
ctrlCallableStatement2.setReturnValue(-1);
mockCallableStatement2.getMoreResults();
ctrlCallableStatement2.setReturnValue(false);
mockCallableStatement2.getUpdateCount();
ctrlCallableStatement2.setReturnValue(-1);
ctrlResultSet.replay();
ctrlStatement.replay();
ctrlStatement2.replay();
ctrlPreparedStatement.replay();
ctrlPreparedStatement2.replay();
ctrlCallableStatement.replay();
ctrlCallableStatement2.replay();
mockConnection.createStatement();
ctrlConnection.setReturnValue(mockStatement, 1);
replay();
JdbcTemplate template = new JdbcTemplate(mockDataSource);
template.setNativeJdbcExtractor(new NativeJdbcExtractor() {
public boolean isNativeConnectionNecessaryForNativeStatements() {
return false;
}
public boolean isNativeConnectionNecessaryForNativePreparedStatements() {
return false;
}
public boolean isNativeConnectionNecessaryForNativeCallableStatements() {
return false;
}
public Connection getNativeConnection(Connection con) {
return con;
}
public Connection getNativeConnectionFromStatement(Statement stmt) throws SQLException {
return stmt.getConnection();
}
public Statement getNativeStatement(Statement stmt) {
assertTrue(stmt == mockStatement);
return mockStatement2;
}
public PreparedStatement getNativePreparedStatement(PreparedStatement ps) {
assertTrue(ps == mockPreparedStatement);
return mockPreparedStatement2;
}
public CallableStatement getNativeCallableStatement(CallableStatement cs) {
assertTrue(cs == mockCallableStatement);
return mockCallableStatement2;
}
public ResultSet getNativeResultSet(ResultSet rs) throws SQLException {
return rs;
}
});
template.query("my query", new ResultSetExtractor() {
public Object extractData(ResultSet rs2) throws SQLException {
assertEquals(mockResultSet, rs2);
return null;
}
});
template.query(new PreparedStatementCreator() {
public PreparedStatement createPreparedStatement(Connection conn) throws SQLException {
return mockPreparedStatement;
}
}, new ResultSetExtractor() {
public Object extractData(ResultSet rs2) throws SQLException {
assertEquals(mockResultSet, rs2);
return null;
}
});
template.call(new CallableStatementCreator() {
public CallableStatement createCallableStatement(Connection con) throws SQLException {
return mockCallableStatement;
}
},
new ArrayList());
ctrlStatement.verify();
ctrlStatement2.verify();
ctrlPreparedStatement.verify();
ctrlPreparedStatement2.verify();
ctrlCallableStatement.verify();
ctrlCallableStatement2.verify();
}
public void testStaticResultSetClosed() throws Exception {
MockControl ctrlResultSet;
ResultSet mockResultSet;
MockControl ctrlStatement;
Statement mockStatement;
MockControl ctrlResultSet2;
ResultSet mockResultSet2;
MockControl ctrlPreparedStatement;
PreparedStatement mockPreparedStatement;
try {
ctrlResultSet = MockControl.createControl(ResultSet.class);
mockResultSet = (ResultSet) ctrlResultSet.getMock();
mockResultSet.close();
ctrlResultSet.setVoidCallable();
ctrlStatement = MockControl.createControl(Statement.class);
mockStatement = (Statement) ctrlStatement.getMock();
mockStatement.executeQuery("my query");
ctrlStatement.setReturnValue(mockResultSet);
mockStatement.close();
ctrlStatement.setVoidCallable();
ctrlResultSet2 = MockControl.createControl(ResultSet.class);
mockResultSet2 = (ResultSet) ctrlResultSet2.getMock();
mockResultSet2.close();
ctrlResultSet2.setVoidCallable();
ctrlPreparedStatement = MockControl.createControl(PreparedStatement.class);
mockPreparedStatement = (PreparedStatement) ctrlPreparedStatement.getMock();
mockPreparedStatement.executeQuery();
ctrlPreparedStatement.setReturnValue(mockResultSet2);
mockPreparedStatement.close();
ctrlPreparedStatement.setVoidCallable();
mockConnection.createStatement();
ctrlConnection.setReturnValue(mockStatement);
mockConnection.prepareStatement("my query");
ctrlConnection.setReturnValue(mockPreparedStatement);
}
catch (SQLException sex) {
throw new RuntimeException("EasyMock initialization of jdbc objects failed");
}
ctrlResultSet.replay();
ctrlStatement.replay();
ctrlResultSet2.replay();
ctrlPreparedStatement.replay();
replay();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -