2017-10-06 4 views
0

J'ai récemment ajouté une classe ApplicationStartup à mon projet SpringBootExclure ApplicationStartup auditeur lors du test de l'événement

@Component 
public class ApplicationStartup 
    implements ApplicationListener<ApplicationReadyEvent> { ... 

Il met en œuvre ApplicationListener.

Maintenant, lorsque j'exécute mes anciens tests JUNit qui n'ont rien à voir avec cette classe, le testrunner essaie d'exécuter mon StartupListener, ce qui n'est pas nécessaire dans ces cas-là. Comment puis-je ignorer le programme ApplicationListener lors de l'initialisation de mes tests?

@RunWith(SpringRunner.class) 
@SpringBootTest 
public class SubmissionItemManagerTest {... 
+0

Essayez-vous d'éviter un seul haricot? –

Répondre

1

Vous pouvez railler votre ApplicationStartup classe

Ajouter cette déclaration à votre cas de test:

@MockBean 
private ApplicationStartup applicationStartup 

Cela va créer une instance moqués de ApplicationStartup et marquer comme @Primary dans votre contexte de test ainsi en remplaçant l'instance réelle de ApplicationStartup.

+0

comment pouvez-vous le faire en utilisant: @SpringBootTest (classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) – fiddle

1

Vous pouvez créer une classe pour tester l'application séparée et ne comprennent pas les composants qui ne sont pas nécessaires pour les tests:

@SpringBootApplication 
@ComponentScan(excludeFilters = @ComponentScan.Filter(
     type = FilterType.ASSIGNABLE_TYPE, 
     value = { ApplicationStartup.class, 
       RealApplication.class })) 

public class TestApplication { 

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

Ensuite, dans votre classe SubmissionItemManagerTest utiliser la classe TestApplication:

@RunWith(SpringRunner.class) 
@SpringBootTest(classes = TestApplication.class) 
public class SubmissionItemManagerTest { 
    ... 
}