我有一些我想测试的Spring服务。这些服务在开始时创建一个连接(池BasicDataSource
),并在成功调用所有DAO ware后提交。
现在我想通过Spring junit测试它们,但最后的“commit”不会回滚(即使使用@Transactional
)。
怎么能这样做(我已经读过spring将方法封装到一个事务中并将其回滚)?
@RunWith(SpringJUnit4ClassRunner.class)
//@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, TransactionalTestExecutionListener.class })
@ContextConfiguration(locations = { "classpath:TestProject-spring-test.xml" })
@Transactional
public abstract class BaseTest {
@Autowired
protected BasicDataSource dataSource;
@Autowired
protected JdbcTemplate jdbc;
@Test
@Rollback(true)
public void testTransactional() throws SQLException{
jdbc.execute("INSERT INTO test (pk) VALUES (0)");
Connection con = dataSource.getConnection();
Statement stmt = con.createStatement();
stmt.executeUpdate("INSERT INTO test (pk) VALUES (1)");
con.commit();
con.close();
}
}
回滚jdbc.execute
,但数据源检索的Connection
不会回滚。
即使我提交连接,如何强制回滚?
答案 0 :(得分:0)
正如@ M.Deinum所指出的,Spring对你的连接一无所知(直接来自你的数据源)所以你不能指望它回滚任何东西。您应该使用spring上下文(以及Spring管理的DAO)来执行测试。 See this example