Java 11 (Corretto 11) 和 Spring 5 5.2.13.RELEASE 升级后 JUnit 4 测试失败,“无法加载 ApplicationContext”

问题描述

正如我在标题中提到的,我们正在从混合 JUnit4&5 和 Spring4.3.11.RELEASE 的 Java8 迁移到 Java11 和 Spring5.2.13.RELEASE。我在 project/build/plugins 部分下配置了以下 maven 版本 3.8.1,

<plugin>
    <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <release>11</release>
            <compilerArgument>-parameters</compilerArgument>
            <useIncrementalCompilation>false</useIncrementalCompilation>
        </configuration>
</plugin>

我们的一些 JUnit 测试现在在 Java 11 和 15 上运行时一直失败。所有测试都像往常一样通过 Java 8。我尝试了一些方法,较新的标签没有成功。我错过了什么或者它是 Java11 的较新 Spring 中的一个已知问题吗?这里是代码片段和堆栈跟踪,

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(classes = { MyTest.TestConfiguration.class }) 
@WebAppConfiguration
public class MyTest {

  private mockmvc mockmvc;

  @Autowired
  private WebApplicationContext wac;

  @Before
  public void setUp() {
    mockmvc = mockmvcBuilders.webAppContextSetup(wac).build();
  }

  @Test
  public void testFail() throws Exception {
    mockmvc.perform(get("/rest/../someUrl")).andExpect(status().isBadRequest());
  }

  @EnableWebMvc
  public static class TestConfiguration {

    @Bean
    public MyRestController myRestController() {
        return new MyRestController();
    } 
    // multiple service layer @Autowired beans in the call stack
    @Bean
    public static SomeOtherBeanServices someOtherAutoWiredBeanServices() {
        return null; // or return mock(SomeServiceBean.class)
    }
  ...

休息控制器,

@RestController
@RequestMapping("/rest/.../someUrl")
public class MyRestController {

@Autowired
private SomeOtherBeanServices someOtherAutoWiredBeanServices;
...

java.lang.IllegalStateException: 加载 ApplicationContext 失败

在 org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:132) 在 org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:123) 在 org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) 在 org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) 在 org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:244) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:227) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289) 在 org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runchild(SpringJUnit4ClassRunner.java:246) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runchild(SpringJUnit4ClassRunner.java:97) 在 org.junit.runners.ParentRunner$4.run(ParentRunner.java:331) 在 org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79) 在 org.junit.runners.ParentRunner.runchildren(ParentRunner.java:329) 在 org.junit.runners.ParentRunner.access$100(ParentRunner.java:66) 在 org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293) 在 org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 在 org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) 在 org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306) 在 org.junit.runners.ParentRunner.run(ParentRunner.java:413) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190) 在 org.junit.runner.JUnitCore.run(JUnitCore.java:137) 在 org.junit.runner.JUnitCore.run(JUnitCore.java:115) 在 org.junit.vintage.engine.execution.RunnerExecutor.execute(RunnerExecutor.java:43) 在 java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) 在 java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) 在 java.base/java.util.Iterator.forEachRemaining(Iterator.java:133) 在 java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801) 在 java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) 在 java.base/java.util.stream.AbstractPipeline.wrapAndcopyInto(AbstractPipeline.java:474) 在 java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) 在 java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) 在 java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) 在 java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497) 在 org.junit.vintage.engine.VintageTestEngine.executeallChildren(VintageTestEngine.java:82) 在 org.junit.vintage.engine.VintageTestEngine.execute(VintageTestEngine.java:73) 在 org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:248) 在 org.junit.platform.launcher.core.DefaultLauncher.lambda$execute$5(DefaultLauncher.java:211) 在 org.junit.platform.launcher.core.DefaultLauncher.withInterceptedStreams(DefaultLauncher.java:226) 在 org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:199) 在 org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:132) 在 com.intellij.junit5.junit5IdeaTestRunner.startRunnerWithArgs(junit5IdeaTestRunner.java:71) 在 com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33) 在 com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:220) 在 com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:53) 引起的: org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名为“addLineItemRuleRESTService”的 bean 时出错: 通过字段表达的不满意依赖 'addLineItemRuleService';嵌套异常是 org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名为“addLineItemRuleService”的 bean 时出错:不满意 通过字段“itemRuleHelperService”表达的依赖;嵌套 例外是 org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名为“itemRuleHelperService”的 bean 时出错:不满意 通过字段“userService”表达的依赖;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDeFinitionException:否 'com.ghx.user.api.IUserService' 类型的合格 bean 可用: 预计至少有 1 个 bean 有资格作为自动装配候选者。 依赖注解: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:643) 在 org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessproperties(AutowiredAnnotationBeanPostProcessor.java:399) 在 org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.populateBean(AbstractAutowireCapablebeanfactory.java:1420) 在 org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.doCreateBean(AbstractAutowireCapablebeanfactory.java:593) 在 org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.createBean(AbstractAutowireCapablebeanfactory.java:516) 在 org.springframework.beans.factory.support.Abstractbeanfactory.lambda$doGetBean$0(Abstractbeanfactory.java:324) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) 在 org.springframework.beans.factory.support.Abstractbeanfactory.doGetBean(Abstractbeanfactory.java:322) 在 org.springframework.beans.factory.support.Abstractbeanfactory.getBean(Abstractbeanfactory.java:202) 在 org.springframework.beans.factory.support.DefaultListablebeanfactory.preInstantiateSingletons(DefaultListablebeanfactory.java:897) 在 org.springframework.context.support.AbstractApplicationContext.finishbeanfactoryInitialization(AbstractApplicationContext.java:879) 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:551) 在 org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:129) 在 org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:61) 在 org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:275) 在 org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:243) 在 org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:99) 在 org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) ... 44 更多 原因: org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名为“addLineItemRuleService”的 bean 时出错:不满意 通过字段“itemRuleHelperService”表达的依赖;嵌套 例外是 org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名为“itemRuleHelperService”的 bean 时出错:不满意 通过字段“userService”表达的依赖;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDeFinitionException:否 'com.ghx.user.api.IUserService' 类型的合格 bean 可用: 预计至少有 1 个 bean 有资格作为自动装配候选者。 依赖注解: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:643) 在 org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessproperties(AutowiredAnnotationBeanPostProcessor.java:399) 在 org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.populateBean(AbstractAutowireCapablebeanfactory.java:1420) 在 org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.doCreateBean(AbstractAutowireCapablebeanfactory.java:593) 在 org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.createBean(AbstractAutowireCapablebeanfactory.java:516) 在 org.springframework.beans.factory.support.Abstractbeanfactory.lambda$doGetBean$0(Abstractbeanfactory.java:324) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) 在 org.springframework.beans.factory.support.Abstractbeanfactory.doGetBean(Abstractbeanfactory.java:322) 在 org.springframework.beans.factory.support.Abstractbeanfactory.getBean(Abstractbeanfactory.java:202) 在 org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) 在 org.springframework.beans.factory.support.DefaultListablebeanfactory.doResolveDependency(DefaultListablebeanfactory.java:1307) 在 org.springframework.beans.factory.support.DefaultListablebeanfactory.resolveDependency(DefaultListablebeanfactory.java:1227) 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640) ... 62 更多 原因: org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名为“itemRuleHelperService”的 bean 时出错:不满意 通过字段“userService”表达的依赖;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDeFinitionException:否 'com.ghx.user.api.IUserService' 类型的合格 bean 可用: 预计至少有 1 个 bean 有资格作为自动装配候选者。 依赖注解: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:643) 在 org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessproperties(AutowiredAnnotationBeanPostProcessor.java:399) 在 org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.populateBean(AbstractAutowireCapablebeanfactory.java:1420) 在 org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.doCreateBean(AbstractAutowireCapablebeanfactory.java:593) 在 org.springframework.beans.factory.support.AbstractAutowireCapablebeanfactory.createBean(AbstractAutowireCapablebeanfactory.java:516) 在 org.springframework.beans.factory.support.Abstractbeanfactory.lambda$doGetBean$0(Abstractbeanfactory.java:324) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) 在 org.springframework.beans.factory.support.Abstractbeanfactory.doGetBean(Abstractbeanfactory.java:322) 在 org.springframework.beans.factory.support.Abstractbeanfactory.getBean(Abstractbeanfactory.java:202) 在 org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) 在 org.springframework.beans.factory.support.DefaultListablebeanfactory.doResolveDependency(DefaultListablebeanfactory.java:1307) 在 org.springframework.beans.factory.support.DefaultListablebeanfactory.resolveDependency(DefaultListablebeanfactory.java:1227) 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640) ... 75 更多 原因: org.springframework.beans.factory.NoSuchBeanDeFinitionException:否 'com.ghx.user.api.IUserService' 类型的合格 bean 可用: 预计至少有 1 个 bean 有资格作为自动装配候选者。 依赖注解: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 在 org.springframework.beans.factory.support.DefaultListablebeanfactory.raiseNoMatchingBeanFound(DefaultListablebeanfactory.java:1717) 在 org.springframework.beans.factory.support.DefaultListablebeanfactory.doResolveDependency(DefaultListablebeanfactory.java:1312) 在 org.springframework.beans.factory.support.DefaultListablebeanfactory.resolveDependency(DefaultListablebeanfactory.java:1227) 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640) ... 88个

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)