简体   繁体   English

运行Spring启动集成测试时无法加载ApplicationContext

[英]Failed to load ApplicationContext when running Spring boot integration test

I am trying to write integration test for spring boot. 我正在尝试为spring boot编写集成测试。 I want the server should be up during test so that I can connect the client from the test code. 我希望服务器在测试期间应该启动,以便我可以从测试代码连接客户端。 Using java 1.7 . 使用java 1.7 I am getting exception when running as maven test. 我作为maven测试运行时遇到异常。 (From console) (从控制台)

java.lang.IllegalStateException: Failed to load ApplicationContext
    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
    at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:228)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:230)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:249)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:89)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:193)
    at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:236)
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:134)
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:113)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
    at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
    at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
    at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:103)
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:74)
Caused by org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappingHandlerAdapter' defined in class path resource [org/springframework/boot/autoconfigure/web/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: java/util/Optional
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:838)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:537)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:752)
    at org.springframework.boot.SpringApplication.doRun(SpringApplication.java:347)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:295)
    at org.springframework.boot.test.SpringApplicationContextLoader.loadContext(SpringApplicationContextLoader.java:98)
    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
    ... 31 more
Caused by java.lang.NoClassDefFoundError: java/util/Optional
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.getDefaultArgumentResolvers(RequestMappingHandlerAdapter.java:590)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.afterPropertiesSet(RequestMappingHandlerAdapter.java:514)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
    ... 47 more
Caused by java.lang.ClassNotFoundException: java.util.Optional
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 51 more

My Pom.xml 我的Pom.xml

<spring.release>1.3.0.RELEASE</spring.release>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>${spring.release}</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <version>${spring.release}</version>
        <scope>test</scope>
    </dependency>

Integration Test Code 集成测试代码

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(AppConfig.class)
@WebAppConfiguration
@IntegrationTest("server.port:8090")
public class WebSocketTest {
    @Test
    public void testWebSocket() throws InterruptedException {}
}

Application configuration: 应用配置:

@Configuration
@ComponentScan(basePackages = {"com.test"})
@SpringBootApplication
class AppConfig {
}

It is not able to load the application context 它无法加载应用程序上下文

As you can see in your stacktrace, there is no java.util.Optional class. 正如您在stacktrace中看到的那样,没有java.util.Optional类。 This class was introduced in Java 8, but you use Java 7. So you have to remove usage of java.util.Optional or update your Java version. 此类是在Java 8中引入的,但您使用的是Java 7.因此您必须删除java.util.Optional用法或更新Java版本。

I'm also using Java 7 and I encountered this error. 我也使用Java 7,我遇到了这个错误。 To my knowledge, none of my code attempted to utilize java.util.Optional . 据我所知,我的代码都没有尝试使用java.util.Optional From what I understand, it was caused by having surefire's forkMode set to once for some reason. 据我所知,这是由于某种原因将forkModeforkMode设置为once而造成的。 No idea why. 不知道为什么。 So I split up my tests in my pom.xml: 所以我在我的pom.xml中拆分我的测试:

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <inherited>true</inherited>
      <configuration>
        <skip>true</skip>
      </configuration>
      <executions>
        <execution>
          <id>everything-but-problematic-test</id>
          <phase>test</test>
          <goals>
            <goal>test</goal>
          </goals>
          <configuration>
            <skip>false</skip>
            <forkMode>once</forkMode>
            <excludes>
              <exclude>**/*problematic-test.java</exclude>
            </excludes>
          </configuration>
        </execution>
        <execution>
          <id>problematic-test</id>
          <phase>test</test>
          <goals>
            <goal>test</goal>
          </goals>
          <configuration>
            <skip>false</skip>
            <forkMode>none</forkMode>
            <includes>
              <include>**/*problematic-test.java</include>
            </includes>
          </configuration>
        </execution>
      </executions>
    </plugin>

I run the tests separately because in my case, simply setting forkMode to none broke other tests. 我单独运行测试,因为在我的情况下,只需将forkMode设置为none破坏其他测试。 That being said, you could try setting forkmode to none for everything before tearing apart your pom.xml 话虽这么说,你可以尝试在拆分pom.xml之前将forkmode设置为none

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 无法在 Spring Boot 测试中加载 ApplicationContext - Failed to load ApplicationContext in Spring Boot test Spring 引导测试“加载 ApplicationContext 失败” - Spring Boot Test "Failed to load ApplicationContext" Spring 引导 - gradlew 测试失败 || 无法加载 ApplicationContext - Spring Boot - gradlew test failed || Failed to load ApplicationContext 使用Spring Boot和H2运行测试时获取异常“无法加载ApplicationContext” - Getting exception “Failed to load ApplicationContext” while running the test with Spring Boot and H2 无法加载ApplicationContext(Spring Boot) - Failed to load ApplicationContext (Spring Boot) Spring-boot:JUnit 测试 ApplicationContext 加载失败 - Spring-boot: JUnit test ApplicationContext failed to load SpringFramework集成测试无法加载ApplicationContext - SpringFramework integration test Failed to load ApplicationContext Spring引导测试在Eclipse中失败但在命令行上传递(由于Null PropertyResolver而无法加载ApplicationContext) - Spring Boot Test Fails in Eclipse but passes on command line (failed to load ApplicationContext because of Null PropertyResolver) 当包含@EnableWebMvc时,Spring无法加载ApplicationContext - Spring Failed to load ApplicationContext when include @EnableWebMvc 无法在Spring中加载ApplicationContext - Failed to load ApplicationContext in Spring
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM