私はテストしたいSpringサービスをいくつか持っています。これらのサービスは、最初に接続(プールされたBasicDataSource
)を作成し、すべてのDAOが正常に呼び出された後にコミットします。Spring Junit Transactionはコミット後にロールバックされません
私はSpring junitでテストしたいが、最後の "commit"はロールバックされない(@Transactional
でも)。
これはどのように行うことができますか(私はそのバネのメソッドを1つのトランザクションにカプセル化してロールバックしています)
@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
はロールバックされていません。
私はConnectionをコミットしてもロールバックを強制できますか?
もちろん、それはしません...あなたは春の範囲外で自分で接続しています。だから、春に管理された接続の場合、ロールバックするものはありません。 –
どうすれば春までに接続して戻すことができますか? – Niko
'JdbcTemplate'を使用してください...あなたは何をテストしようとしていますか? –