2015-10-15 1 views
3

Sans entrer dans les détails atroce, j'ai un problème quand je lance mes tests Junit tout à la fois. Si je les cours par classe, tout va bien! Sinon j'ai des problèmes car je ne peux pas redémarrer ma WebApplication entre junit-test-class. Cela me cause d'avoir des clients du serveur Zookeeper dans mon WebApplication qui traînent après que je passe par l'arrêt et le démarrage du serveur Zookeeper entre les classes. Ces clients serveur Zookeeper peuvent prendre un certain temps pour resynchroniser avec le serveur et cela provoque un comportement imprévisible ...J'ai besoin de mon Spring Boot WebApplication pour redémarrer dans JUnit

Est-il possible de faire redémarrer ma classe SpringBootServletInitializer en appelant quelque chose dans les méthodes @BeforeClass et @AfterClass d'un test JUnit?

WebApplication.java

@ComponentScan 
@EnableAutoConfiguration 
@EnableWebMvc 
@EnableHyperMediaSupport(...) 
@PropertySources(...) 
public class WebApplication extends SpringBootServletInitializer 
{ 
    @Override 
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) 
    { 
     return builder.sources(WebApplication.class); 
    } 

    @Override 
    protected WebApplicationContext run(SpringApplication application) 
    { 
     application.getSources().remove(ErrorPageFilter.class); 
     return (WebApplicationContext) application.run(); 
    } 

    public static void main(String[] args) 
    { 
     SpringApplication.run(WebApplication.class, args); 
    } 
} 
+1

Peut-être '@ DirtiesContext'? https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/test/annotation/DirtiesContext.html –

+0

Bingo! Veuillez transformer votre commentaire en réponse pour que je puisse le vérifier: D – smuggledPancakes

Répondre

4

Vous pouvez utiliser l'annotation @DirtiesContext.

Ceci indiquera au coureur Spring Test de recharger le contexte entre les méthodes de test.