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.
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 {
...
}
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>
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.