wake-up-neo.com

Spring Boot 1.4 Testing: Konfigurationsfehler: Es wurden mehrere Deklarationen von @BootstrapWith gefunden

Folgen Sie dem offiziellen Dokument hier: http://docs.spring.io/spring-boot/docs/1.4.0.M2/reference/htmlsingle/#Testing

ich wollte eine meiner REST - API-Methode wie folgt testen:

@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);
    }
}

Wie im Dokument angegeben:

Der Suchalgorithmus arbeitet mit dem Paket zusammen, das den Test .__ enthält. bis es eine @SpringBootApplication oder @SpringBootConfiguration .__ findet. kommentierte Klasse. Solange Sie Ihren Code in einer sinnvollen Weise strukturiert haben So wird Ihre Hauptkonfiguration normalerweise gefunden.

Ich habe meinen Code richtig strukturiert (zumindest glaube ich):

AuthorizationService: befindet sich unter Paket com.xxx.yyy.zzz.authorization; 

AuthorizationServiceTest: befindet sich unter Paket com.xxx.yyy.zzz.authorizationTest;

Ich bekomme diese Ausnahme (Full Trace):

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)

Bitte helfen Sie mir dabei, ich habe schon mehr als 2-3 Stunden ohne Glück verbracht.

Vielen Dank.

16
lesnar

Diese Ausnahmebedingung tritt auf, wenn der Federtest die Hauptkonfigurationsklasse nicht finden kann .. Versuchen Sie, @ContextConfiguration anootation zu Ihrer Testklasse hinzuzufügen. Folgen Sie der Dokumentation zum Federtest, um weitere Informationen zu erhalten (Abschnitt Testkonfiguration erkennen ).

Mein Beispiel für eine Testklasse ist wie folgt:

@RunWith(SpringRunner.class)
@ContextConfiguration(classes=Application.class)
@WebMvcTest(MyController.class)
public class MyConrollerTests {
    ...
}
14
mahkras

Entfernen Sie einfach den @SpringBootTest und alles funktioniert einwandfrei. Ich hatte das gleiche Problem mit @SpringBootTest und @DataJpaTest. Dieser Fehler trat auf, als ich die pom.xml-übergeordnete Springboot-Version auf 2.1.0 aufrief, wie unten beschrieben. Bei der Version 2.0.5 wurde dieser Fehler nicht erhöht.

@RunWith(SpringRunner.class)
//@SpringBootTest//(classes = KalahApplication.class)
// DataJpaTest supports rollback after running every test case
@DataJpaTest
public class GameRepositoryTest {

pom.xml

   <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
   </parent>
8
Nesrin

Ich weiß, dass es zu spät ist, um diese Frage zu beantworten, aber es könnte jemandem in der Zukunft helfen, also ... Ich hatte das gleiche Problem und nach einigen Nachforschungen stellte ich fest, dass es nicht @WebMvcTest geben sollte, wenn @SpringBootTest vorhanden ist. Entfernen Sie einfach @WebMvcTest und @SpringBootTest kümmert sich um den Rest.

0
jalil