J'ai quelques services de printemps que je veux tester. Ces services créent une connexion (pooled BasicDataSource
) au début et valide après que tous les DAOs ont été appelés avec succès.Spring Junit Transaction ne pas rollback après validation
Maintenant je veux les tester via Spring junit, mais le "commit" à la fin n'est pas annulé (même avec @Transactional
). Comment cela peut-il être fait (j'ai lu que le printemps encapsule les méthodes en une seule transaction et les restaure)?
@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();
}
}
Le jdbc.execute
est annulée, mais le Connection
récupéré par source de données ne sera pas annulée.
comment puis-je forcer une annulation même si je commet une connexion?
Bien sûr, il ne sera pas ... Vous obtenez une connexion vous-même en dehors de la portée du printemps. Donc, pour la connexion gérée au printemps, il n'y a rien à annuler. –
comment puis-je obtenir une connexion au printemps et le rendre? – Niko
Utilisez le 'JdbcTemplate' ... Qu'est-ce que vous essayez de tester? –