我正在尝试测试我的 dao,它在后台使用 jdbcTemplate.batchUpdate 方法。
我的测试是针对真实数据源运行的,所有方法都在标记为仅回滚的事务中执行(任何更改都会在测试后回滚)。测试事务由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 方法项?提前致谢。