public void testPerformInTransaction_ExistingTx() { final BaseTransaction tx1 = mock(BaseTransaction.class); TransactionFactory txFactory = mock(TransactionFactory.class); when(txFactory.createTransaction()).thenReturn(tx1); DefaultTransactionManager txManager = new DefaultTransactionManager(txFactory, mock(JdbcEventLogger.class)); final BaseTransaction tx2 = mock(BaseTransaction.class); BaseTransaction.bindThreadTransaction(tx2); try { final Object expectedResult = new Object(); Object result = txManager.performInTransaction( new TransactionalOperation<Object>() { public Object perform() { assertSame(tx2, BaseTransaction.getThreadTransaction()); return expectedResult; } }); assertSame(expectedResult, result); } finally { BaseTransaction.bindThreadTransaction(null); } }