Printemps de démarrage 1.4 Test : erreur de Configuration: trouvé plusieurs déclarations de @BootstrapWith
En suivant la doc officielle ici:
http://docs.spring.io/spring-boot/docs/1.4.0.M2/reference/htmlsingle/#Testing
j'ai voulu tester une de mes API REST méthode comme ceci:
@RunWith(SpringRunner.class)
@WebMvcTest(LoginController.class)
@SpringBootTest(classes = Application.class)
public class AuthorizationServiceTest {
@Autowired
private TestRestTemplate restTemplate;
@Test
public void test() {
Object returnedObject=his.restTemplate.getForObject("/login", Object.class);
}
}
Comme indiqué dans la doc :
De l'algorithme de recherche avec des travaux à partir du package qui contient le test
jusqu'à ce qu'il trouve un @SpringBootApplication ou @SpringBootConfiguration
annoté de la classe. Tant que vous avez la structure de votre code dans un bon
façon votre configuration principal est généralement trouvé.
J'ai structuré mon code correctement(au moins je crois ):
AuthorizationService : est sous package com.xxx.yyy.zzz.autorisation;
AuthorizationServiceTest : est sous package com.xxx.yyy.zzz.authorizationTest;
Je reçois cette exception(Trace Complète):
java.lang.IllegalStateException: Configuration error: found multiple declarations of @BootstrapWith for test class [com.orangeraid.rasberry.gateway.authorizationTest.AuthorizationServiceTest]: [@org.springframework.test.context.BootstrapWith(value=class org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTestContextBootstrapper), @org.springframework.test.context.BootstrapWith(value=class org.springframework.boot.test.context.SpringBootTestContextBootstrapper)]
at org.springframework.test.context.BootstrapUtils.resolveExplicitTestContextBootstrapper(BootstrapUtils.java:155)
at org.springframework.test.context.BootstrapUtils.resolveTestContextBootstrapper(BootstrapUtils.java:126)
at org.springframework.test.context.TestContextManager.<init>(TestContextManager.java:105)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTestContextManager(SpringJUnit4ClassRunner.java:152)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<init>(SpringJUnit4ClassRunner.java:143)
at org.springframework.test.context.junit4.SpringRunner.<init>(SpringRunner.java:49)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104)
at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createUnfilteredTest(JUnit4TestLoader.java:84)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:70)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:43)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:444)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Merci de m'aider, j'ai déjà passé plus de 2-3 heures sans un peu de chance.
Grâce.
@SpringBootTest
et @WebMvcTest
sont mutuellement exclusifs... Soit vous testez l'ensemble de l'application ou vous testez une tranche, mais pas les deux.son grand conseil, merci
J'ai eu un problème similaire avec les deux
@SpringBootTest
et @DataMongoTest
. Retrait @SpringBootTest
résolu le problème. Le message d'erreur pourrait être plus clair...
OriginalL'auteur lesnar | 2016-12-09
Vous devez vous connecter pour publier un commentaire.
Cette exception se produit lorsque le printemps de test ne peut pas trouver de configuration principal de la classe.
Essayez d'ajouter @ContextConfiguration anootation à votre classe de test. Suivez le printemps, test de documentation pour plus de détails (section Test de détection de configuration)
Mon exemple de la classe de Test est comme ceci:
Remarque: Il est également nécessaire si vous déplacer Application.class à partir de la valeur par défaut principal à un sous-paquet.
Résout également les 2 classes de l'application problème lorsque vous avez un distinct pour les tests.
OriginalL'auteur mahkras
Juste Enlever le @SpringBootTest et tout fonctionne bien. J'ai eu le même problème avec l'aide de @SpringBootTest et @DataJpaTest, cette erreur lorsque j'ai mis à jour le pom.xml parent springboot version 2.1.0 comme ci-dessous. Quand j'utilisais la version 2.0.5, cette erreur a été de ne pas soulever.
pom.xml
OriginalL'auteur Nesrin
Je sais que c'est trop tard pour répondre à cette question, mais il peut aider quelqu'un dans le futur, donc... j'ai eu le même problème et après quelques recherches, j'ai trouvé qu'il ne devrait pas être
@WebMvcTest
si il y a@SpringBootTest
. il suffit donc de retirer@WebMvcTest
et@SpringBootTest
est de prendre soin de tout le reste.In this test, the full Spring application context is started, but without the server. We can narrow down the tests to just the web layer by using @WebMvcTest
Qui signifie@WebMvcTest
est utile pour faire des tests un peu plus léger en ne chargeant pas un serveur ni un plein contexte de l'application. Ainsi Nesrin la réponse est plus précise.OriginalL'auteur jalil