内部で jdbcTemplate.batchUpdate メソッドを使用する dao をテストしようとしています。
私のテストは実際のデータソースに対して実行され、すべてのメソッドはロールバックのみとしてマークされたトランザクションで実行されます (すべての変更はテスト後にロールバックされます)。テスト トランザクションはPlatformTransactionManagerによって管理されます。
ここでの問題は、jdbcTemplate.batchUpdate がDataSourceTransactionManagerによって開始された別のトランザクションで実行されているように見えるため、jdbcTemplate によって行われた変更が表示されないことです。
私のテスト:
@Transactional
@TransactionConfiguration(transactionManager = "txManager", defaultRollback = true)
@RunWith(SpringJUnit4ClassRunner.class)
public abstract class AbstractDbUnitTest
...
@Test
public void removeSpecific() {
myDao.removeSpecific(myDao.findAllAliasedItems());
Assert.assertEquals(0, myDao.findAllAliasedItems().size());
}
ダオ
@Override
public void removeSpecific(final List<? extends Item> items) {
jdbcTemplate.batchUpdate("delete from ITEM where item_type = ? and item_id = ?", new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
ps.setString(1, items.get(i).getType().name());
ps.setString(2, items.get(i).getId(););
}
@Override
public int getBatchSize() {
return items.size();
}
});
}
実際にデータを変更せずに batchUpdate メソッド項目をテストする方法はありますか? 前もって感謝します。