2017-06-16 95 views
0

我有一個Spring引導應用程序拋出一些異常'java.lang.IllegalStateException:無法從JUnit測試運行時加載TestContextBootstrapper [null]'。從Junit測試運行時,Spring Boot應用程序拋出異常

的pom.xml:

<properties> 
     <java.version>1.7</java.version> 
     <spring.version>4.2.5.RELEASE</spring.version>  
</properties> 

<dependencies> 

<dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-web</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-jdbc</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
<dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
<dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
      <version>1.4.2.RELEASE</version> 
      <scope>test</scope> 
      <exclusions> 
       <exclusion> 
        <groupId>ch.qos.logback</groupId> 
        <artifactId>logback-classic</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
<dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <version>1.4.2.RELEASE</version> 
     </dependency> 
</dependencies> 

由於這pom.xml中有不同的彈簧版本如春4.2.5.RELEASE春季啓動1.4.2.RELEASE,當它從JUnit測試運行時,它拋出例外:

JUnit的日誌:

java.lang.IllegalStateException: Could not load TestContextBootstrapper [null]. Specify @BootstrapWith's 'value' attribute or make the default bootstrapper class available. 
    at org.springframework.test.context.BootstrapUtils.resolveTestContextBootstrapper(BootstrapUtils.java:143) 
    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:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526) 
    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:678) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) 
Caused by: java.lang.NoSuchMethodError: org.springframework.core.annotation.AnnotatedElementUtils.findAllMergedAnnotations(Ljava/lang/reflect/AnnotatedElement;Ljava/lang/Class;)Ljava/util/Set; 
    at org.springframework.test.context.BootstrapUtils.resolveExplicitTestContextBootstrapper(BootstrapUtils.java:150) 
    at org.springframework.test.context.BootstrapUtils.resolveTestContextBootstrapper(BootstrapUtils.java:126) 
    ... 21 more 

爲春春啓動之間的版本匹配任何建議?

回答

1

根據the change log,org.springframework.core.annotation.AnnotatedElementUtils.findAllMergedAnnotations()自4.3版本開始引入。因此,您可能必須將版本從<spring.version>4.2.5.RELEASE</spring.version>更改爲<spring.version>4.3.0.RELEASE</spring.version>或更高版本。

+ * @since 4.3 
+ * @see #findMergedAnnotation(AnnotatedElement, Class) 
+ */ 
+ public static <A extends Annotation> Set<A> findAllMergedAnnotations(AnnotatedElement element, 
+   Class<A> annotationType) { 
+0

改變彈簧引導啓動測試版本1.1.4,並使用@RunWith(SpringJUnit4ClassRunner.class)來和@SpringApplicationConfiguration(類= Application.class)爲我工作。 –

+0

啊,將啓動測試降級到1.1.4。聽起來像另一種解決方案。 –

相關問題