@TestExecutionListeners(value={TransactionalTestExecutionListener.class,SqlScriptsTestExecutionListener.class}) @Transactional public abstract class AbstractTransactionalJUnit4SpringContextTests extends AbstractJUnit4SpringContextTests
AbstractJUnit4SpringContextTests
which adds convenience functionality
for JDBC access. Expects a DataSource
bean and a
PlatformTransactionManager
bean to be defined in the Spring
application context.
This class exposes a JdbcTemplate
and provides an easy way to
count the number of rows in a table
(potentially with a WHERE clause),
delete from tables,
drop tables, and
execute SQL scripts within a transaction.
Concrete subclasses must fulfill the same requirements outlined in
AbstractJUnit4SpringContextTests
.
The following TestExecutionListeners
are configured by default:
ServletTestExecutionListener
DependencyInjectionTestExecutionListener
DirtiesContextTestExecutionListener
TransactionalTestExecutionListener
SqlScriptsTestExecutionListener
This class serves only as a convenience for extension.
SpringJUnit4ClassRunner
, @ContextConfiguration
,
@TestExecutionListeners
, etc.SpringJUnit4ClassRunner
, as of Spring Framework 4.2 you can use
SpringClassRule
and
SpringMethodRule
and specify your runner of choice via @RunWith(...)
.NOTE: As of Spring Framework 4.1, this class requires JUnit 4.9 or higher.
AbstractJUnit4SpringContextTests
,
ContextConfiguration
,
TestExecutionListeners
,
TransactionalTestExecutionListener
,
SqlScriptsTestExecutionListener
,
TransactionConfiguration
,
Transactional
,
Rollback
,
BeforeTransaction
,
AfterTransaction
,
JdbcTestUtils
,
AbstractTransactionalTestNGSpringContextTests
Modifier and Type | Field and Description |
---|---|
protected JdbcTemplate |
jdbcTemplate
The
JdbcTemplate that this base class manages, available to subclasses. |
private java.lang.String |
sqlScriptEncoding |
applicationContext, logger
Constructor and Description |
---|
AbstractTransactionalJUnit4SpringContextTests() |
Modifier and Type | Method and Description |
---|---|
protected int |
countRowsInTable(java.lang.String tableName)
Convenience method for counting the rows in the given table.
|
protected int |
countRowsInTableWhere(java.lang.String tableName,
java.lang.String whereClause)
Convenience method for counting the rows in the given table, using the
provided
WHERE clause. |
protected int |
deleteFromTables(java.lang.String... names)
Convenience method for deleting all rows from the specified tables.
|
protected int |
deleteFromTableWhere(java.lang.String tableName,
java.lang.String whereClause,
java.lang.Object... args)
Convenience method for deleting all rows from the given table, using the
provided
WHERE clause. |
protected void |
dropTables(java.lang.String... names)
Convenience method for dropping all of the specified tables.
|
protected void |
executeSqlScript(java.lang.String sqlResourcePath,
boolean continueOnError)
Execute the given SQL script.
|
void |
setDataSource(javax.sql.DataSource dataSource)
Set the
DataSource , typically provided via Dependency Injection. |
void |
setSqlScriptEncoding(java.lang.String sqlScriptEncoding)
Specify the encoding for SQL scripts, if different from the platform encoding.
|
setApplicationContext
protected JdbcTemplate jdbcTemplate
JdbcTemplate
that this base class manages, available to subclasses.private java.lang.String sqlScriptEncoding
public AbstractTransactionalJUnit4SpringContextTests()
@Autowired public void setDataSource(javax.sql.DataSource dataSource)
DataSource
, typically provided via Dependency Injection.
This method also instantiates the jdbcTemplate
instance variable.
public void setSqlScriptEncoding(java.lang.String sqlScriptEncoding)
protected int countRowsInTable(java.lang.String tableName)
tableName
- table name to count rows inJdbcTestUtils.countRowsInTable(org.springframework.jdbc.core.JdbcTemplate, java.lang.String)
protected int countRowsInTableWhere(java.lang.String tableName, java.lang.String whereClause)
WHERE
clause.
See the Javadoc for JdbcTestUtils.countRowsInTableWhere(org.springframework.jdbc.core.JdbcTemplate, java.lang.String, java.lang.String)
for details.
tableName
- the name of the table to count rows inwhereClause
- the WHERE
clause to append to the queryWHERE
clauseJdbcTestUtils.countRowsInTableWhere(org.springframework.jdbc.core.JdbcTemplate, java.lang.String, java.lang.String)
protected int deleteFromTables(java.lang.String... names)
Use with caution outside of a transaction!
names
- the names of the tables from which to deleteJdbcTestUtils.deleteFromTables(org.springframework.jdbc.core.JdbcTemplate, java.lang.String...)
protected int deleteFromTableWhere(java.lang.String tableName, java.lang.String whereClause, java.lang.Object... args)
WHERE
clause.
Use with caution outside of a transaction!
See the Javadoc for JdbcTestUtils.deleteFromTableWhere(org.springframework.jdbc.core.JdbcTemplate, java.lang.String, java.lang.String, java.lang.Object...)
for details.
tableName
- the name of the table to delete rows fromwhereClause
- the WHERE
clause to append to the queryargs
- arguments to bind to the query (leaving it to the PreparedStatement
to guess the corresponding SQL type); may also contain
SqlParameterValue
objects which indicate not only the argument value but also the SQL type
and optionally the scale.JdbcTestUtils.deleteFromTableWhere(org.springframework.jdbc.core.JdbcTemplate, java.lang.String, java.lang.String, java.lang.Object...)
protected void dropTables(java.lang.String... names)
Use with caution outside of a transaction!
names
- the names of the tables to dropJdbcTestUtils.dropTables(org.springframework.jdbc.core.JdbcTemplate, java.lang.String...)
protected void executeSqlScript(java.lang.String sqlResourcePath, boolean continueOnError) throws DataAccessException
Use with caution outside of a transaction!
The script will normally be loaded by classpath.
Do not use this method to execute DDL if you expect rollback.
sqlResourcePath
- the Spring resource path for the SQL scriptcontinueOnError
- whether or not to continue without throwing an
exception in the event of an errorDataAccessException
- if there is an error executing a statementResourceDatabasePopulator
,
setSqlScriptEncoding(java.lang.String)