L'annotation @BeforeClass
de JUnit doit être déclarée statique si vous souhaitez qu'elle s'exécute une fois avant toutes les méthodes @Test
. Cependant, cela ne peut pas être utilisé avec l'injection de dépendance.
Je souhaite nettoyer une base de données que je @Autowire
avec Spring Boot, une fois avant d'exécuter mes tests JUnit. Je ne peux pas @Autowire
champs statiques donc je dois penser à un moyen de contourner le problème. Des idées?
Utilisez simplement @Before
(au lieu de @BeforeClass
) (ou BeforeTransaction
(selon la façon dont vous initialisez la base de données)). Cette annotation doit être attachée à une méthode publique non statique.
Bien sûr: @Before
exécuté avant chaque méthode de test (pas comme @BeforeClass
qui ne s'exécute qu'une seule fois). Mais si vous voulez l'exécuter exactement une fois, utilisez un champ de marqueur statique.
private static boolean initialized = false;
...
@Before
public void initializeDB() {
if (!initialized) {
... //your db initialization
initialized = true;
}
}
---
Essayez cette solution: https://stackoverflow.com/a/46274919/907576 :
avec les annotations @BeforeAllMethods
/@AfterAllMethods
, vous pouvez exécuter n’importe quelle méthode de la classe Test dans un contexte d’instance, où toutes les valeurs injectées sont disponibles.
Bien que la réponse acceptée soit intelligente, semble hacky. Avez-vous essayé d'utiliser un constructeur normal?
public class MyJUnitTest {
public MyJUnitTest() {
// code for initializeDB
}
// Tests
}
Examinez la bibliothèque DBUnit - elle est conçue pour exécuter les actions que vous décrivez. Il peut créer et supprimer des instances de base de données et vous fournit des moyens simples de le faire.