Comment exécuter @Sql avant une méthode @Before
J'essaie de combiner le suivi des annotations:
org.springframework.test.contexte.jdbc.Sql
et
org.junit.Avant
Comme le code ci-dessous:
@Test
@Sql(scripts = "dml-parametro.sql")
public void testData(){
Iterable<Parametro> parametros = parametroService.findAll();
List<Parametro> parametrosList = Lists.newArrayList(parametros);
Assert.assertThat(parametrosList.size(), Is.is(1));
}
@Before
public void beforeMethod() {
JdbcTestUtils.deleteFromTables(jdbcTemplate, "PARAMETRO");
}
Le code dans la méthode @Avant est de courir après le script "dml-parametro.sql" dans le @Sql annotation.
Est-il le droit de le faire?
Pour cette solution, je suis en utilisant @Après que @Avant, mais je tiens à cdelete tables avant l'exécution du test, pas après.
Je ne voudrais pas utiliser @SqlConfig. Je ne suis pas en utilisant transacional portée sur le niveau du test, j'ai donc besoin de nettoyer mes tables dans chaque méthode de test. Si chaque méthode de test besoin de nettoyer les tables, je voudrais le faire dans le @Avant méthode. Je ne voudrais pas le faire à chaque méthode de test avec @SqlConfig. Je pense que le comportement de @Sql à exécuter avant que @Avant est faux.
source d'informationauteur Rafael Duque Estrada
Vous devez vous connecter pour publier un commentaire.
Par défaut, les scripts SQL exécutées via
@Sql
sera exécuté avant tout@Before
méthodes. Donc, le problème que vous rencontrez est correct, mais vous pouvez changer la phase d'exécution via leexecutionPhase
attribut dans@Sql
(voir exemple ci-dessous).Si vous voulez exécuter plusieurs scripts, c'est également possible via
@Sql
.Donc si vous avez un nettoyage script nommé
clean-parametro.sql
qui supprime de laPARAMETRO
table, vous pouvez annoter votre méthode de test comme suit (au lieu d'invoquerJdbcTestUtils.deleteFromTables()
dans votre@Before
méthode).Bien sûr, si
dml-parametro.sql
insère des valeurs dans laPARAMETRO
table, alors il ne devrait pas faire sens pour supprimer immédiatement ces valeurs dans le processus de nettoyage de script.Veuillez noter que
@Sql
et@SqlConfig
offre plusieurs niveaux de configuration pour l'exécution du script.Par exemple, si vous souhaitez créer des tables avant votre test et de nettoyer après votre test, vous pourriez faire quelque chose comme ceci sur Java 8:
Ou de l'utilisation
@SqlGroup
comme un conteneur sur la version 6 de Java ou Java 7:Si vos tests sont
@Transactional
et que vous souhaitez nettoyer commis à l'état de base de données, vous pouvez demander de Printemps pour l'exécution de votre nettoyage de script SQL dans une nouvelle transaction comme ceci:J'espère que cela clarifie les choses pour vous!
Acclamations,
Sam (auteur de la Spring Framework TestContext)
Notes:
AFTER_TEST_METHOD
est statiquement importés deExecutionPhase
ISOLATED
est statiquement importés deTransactionMode