我无法使用相当简单的测试方案。逻辑上(对我来说)它应该,但它不是
我有一个交易服务:
@Transactional(propagation = Propagation.REQUIRED)
public void addCustomer(Customer newCustomer) {
customerDAO.insert(newCustomer);
}
因此,它设置为启动事务或重用现有事务。我在应用程序上下文中设置了tx:annotation-driven transaction-manager="transactionManager"
,因此Spring将此服务视为事务性的。
我有一个调用此代码的测试,工作正常。
但是我想要另一个测试来验证回滚。所以我创建了一个调用TranscationTemplate块的测试,例如:
final int preCount = service.getCustomerCount();;
TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);
transactionTemplate.execute(new TransactionCallback<Void>() {
public Void doInTransaction(TransactionStatus status) {
// adding another and rolling back
Customer c = new Customer();
.
.
service.addCustomer(c);
status.setRollbackOnly();
throw new RuntimeException("rollback");
我认为这会回滚addCustomer服务调用,因为这个块和服务都应该(?)共享同一个事务。
但回滚永远不会发生
任何想法为什么?你能否分享程序化和声明性交易?
修改&GT; 目标数据库是H2。
Junit定义如下:
RunWith(SpringJUnit4ClassRunner.class)
ContextConfiguration(locations = {"/customer-application-context.xml"})
public class TestAddCustomer extends AbstractTransactionalJUnit4SpringContextTests
事务管理器在类中自动装配。