簡體   English   中英

SpringJUnit4ClassRunner在Spring5中損壞了嗎?

[英]SpringJUnit4ClassRunner broken in Spring5?

使用Spring 4.3.13和5.0.2版本運行測試時,我一直遇到一種特殊的行為。

給出以下簡單測試,我只想確保可以將上下文加載到測試中:

@ContextConfiguration(classes = {MyTestConfig.class})
@RunWith(MockitoJUnitRunner.class)
public class MySpring4RunnerTest {

  @ClassRule
  public static final SpringClassRule SPRING_CLASS_RULE = new SpringClassRule();

  @Rule
  public final SpringMethodRule springMethodRule = new SpringMethodRule();

  @Autowired
  private ApplicationContext appCtx;

  @Test
  public void testBeanNames() {
    String[] beans = this.appCtx.getBeanDefinitionNames();
    Arrays.sort(beans);
    System.out.println("\nSpring Managed Beans:");
    Stream.of(beans).forEach(it -> System.out.println(it));    
  }
}

這與spring-test:4.3.13預期的一樣工作。

[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

但是,如果我將Spring版本更改為5.0.2.RELEASE(是的,包括spring-test),則會收到以下異常消息:

2018-01-17 16:37:38,128 ERROR [main] org.springframework.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@6f8e8894] to prepare test instance [com.example.MySpring4RunnerTest@418c5a9c] java.lang.ArrayIndexOutOfBoundsException: 1
        at org.springframework.test.context.TestExecutionListener.prepareTestInstance(TestExecutionListener.java:96)
        at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:242)
        at org.springframework.test.context.junit4.statements.RunPrepareTestInstanceCallbacks.evaluate(RunPrepareTestInstanceCallbacks.java:63)
        at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
        at org.springframework.test.context.junit4.statements.SpringFailOnTimeout.evaluate(SpringFailOnTimeout.java:87)
        at org.springframework.test.context.junit4.statements.ProfileValueChecker.evaluate(ProfileValueChecker.java:103)
        at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
        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.springframework.test.context.junit4.statements.ProfileValueChecker.evaluate(ProfileValueChecker.java:103)
        at org.springframework.test.context.junit4.rules.SpringClassRule$TestContextManagerCacheEvictor.evaluate(SpringClassRule.java:230)
        at org.junit.rules.RunRules.evaluate(RunRules.java:20)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
        at org.mockito.internal.runners.JUnit45AndHigherRunnerImpl.run(JUnit45AndHigherRunnerImpl.java:37)
        at org.mockito.runners.MockitoJUnitRunner.run(MockitoJUnitRunner.java:62)
        at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:369)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:275)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:239)
        at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:160)
        at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:373)
        at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:334)
        at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:119)
        at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:407) 2018-01-17 16:37:38,304 WARN  [main] org.springframework.test.context.TestContextManager - Caught exception while invoking 'afterTestClass' callback on TestExecutionListener [org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@15f47664] for test class [class com.example.MySpring4RunnerTest] java.lang.ArrayIndexOutOfBoundsException: 6
        at org.springframework.test.context.TestExecutionListener.afterTestClass(TestExecutionListener.java:201)
        at org.springframework.test.context.TestContextManager.afterTestClass(TestContextManager.java:481)
        at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:77)
        at org.springframework.test.context.junit4.statements.ProfileValueChecker.evaluate(ProfileValueChecker.java:103)
        at org.springframework.test.context.junit4.rules.SpringClassRule$TestContextManagerCacheEvictor.evaluate(SpringClassRule.java:230)
        at org.junit.rules.RunRules.evaluate(RunRules.java:20)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
        at org.mockito.internal.runners.JUnit45AndHigherRunnerImpl.run(JUnit45AndHigherRunnerImpl.java:37)
        at org.mockito.runners.MockitoJUnitRunner.run(MockitoJUnitRunner.java:62)
        at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:369)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:275)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:239)
        at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:160)
        at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:373)
        at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:334)
        at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:119)
        at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:407) 2018-01-17 16:37:38,305 WARN  [main] org.springframework.test.context.TestContextManager - Caught exception while invoking 'afterTestClass' callback on TestExecutionListener [org.springframework.test.context.transaction.TransactionalTestExecutionListener@e25951c] for test class [class com.example.MySpring4RunnerTest] java.lang.ArrayIndexOutOfBoundsException: 6
        at org.springframework.test.context.TestExecutionListener.afterTestClass(TestExecutionListener.java:201)
        at org.springframework.test.context.TestContextManager.afterTestClass(TestContextManager.java:481)
        at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:77)
        at org.springframework.test.context.junit4.statements.ProfileValueChecker.evaluate(ProfileValueChecker.java:103)
        at org.springframework.test.context.junit4.rules.SpringClassRule$TestContextManagerCacheEvictor.evaluate(SpringClassRule.java:230)
        at org.junit.rules.RunRules.evaluate(RunRules.java:20)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
        at org.mockito.internal.runners.JUnit45AndHigherRunnerImpl.run(JUnit45AndHigherRunnerImpl.java:37)
        at org.mockito.runners.MockitoJUnitRunner.run(MockitoJUnitRunner.java:62)
        at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:369)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:275)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:239)
        at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:160)
        at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:373)
        at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:334)
        at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:119)
        at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:407) 2018-01-17 16:37:38,307 WARN  [main] org.springframework.test.context.TestContextManager - Caught exception while invoking 'afterTestClass' callback on TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@3cfdd820] for test class [class com.example.MySpring4RunnerTest] java.lang.ArrayIndexOutOfBoundsException: 6
        at org.springframework.test.context.TestExecutionListener.afterTestClass(TestExecutionListener.java:201)
        at org.springframework.test.context.TestContextManager.afterTestClass(TestContextManager.java:481)
        at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:77)
        at org.springframework.test.context.junit4.statements.ProfileValueChecker.evaluate(ProfileValueChecker.java:103)
        at org.springframework.test.context.junit4.rules.SpringClassRule$TestContextManagerCacheEvictor.evaluate(SpringClassRule.java:230)
        at org.junit.rules.RunRules.evaluate(RunRules.java:20)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
        at org.mockito.internal.runners.JUnit45AndHigherRunnerImpl.run(JUnit45AndHigherRunnerImpl.java:37)
        at org.mockito.runners.MockitoJUnitRunner.run(MockitoJUnitRunner.java:62)
        at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:369)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:275)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:239)
        at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:160)
        at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:373)
        at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:334)
        at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:119)
        at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:407) 2018-01-17 16:37:38,307 WARN  [main] org.springframework.test.context.TestContextManager - Caught exception while invoking 'afterTestClass' callback on TestExecutionListener [org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@6f8e8894] for test class [class com.example.MySpring4RunnerTest] java.lang.ArrayIndexOutOfBoundsException: 6
        at org.springframework.test.context.TestExecutionListener.afterTestClass(TestExecutionListener.java:201)
        at org.springframework.test.context.TestContextManager.afterTestClass(TestContextManager.java:481)
        at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:77)
        at org.springframework.test.context.junit4.statements.ProfileValueChecker.evaluate(ProfileValueChecker.java:103)
        at org.springframework.test.context.junit4.rules.SpringClassRule$TestContextManagerCacheEvictor.evaluate(SpringClassRule.java:230)
        at org.junit.rules.RunRules.evaluate(RunRules.java:20)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
        at org.mockito.internal.runners.JUnit45AndHigherRunnerImpl.run(JUnit45AndHigherRunnerImpl.java:37)
        at org.mockito.runners.MockitoJUnitRunner.run(MockitoJUnitRunner.java:62)
        at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:369)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:275)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:239)
        at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:160)
        at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:373)
        at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:334)
        at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:119)
        at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:407) 2018-01-17 16:37:38,308 WARN  [main] org.springframework.test.context.TestContextManager - Caught exception while invoking 'afterTestClass' callback on TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@6b0d80ed] for test class [class com.example.MySpring4RunnerTest] java.lang.ArrayIndexOutOfBoundsException: 6
        at org.springframework.test.context.TestExecutionListener.afterTestClass(TestExecutionListener.java:201)
        at org.springframework.test.context.TestContextManager.afterTestClass(TestContextManager.java:481)
        at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:77)
        at org.springframework.test.context.junit4.statements.ProfileValueChecker.evaluate(ProfileValueChecker.java:103)
        at org.springframework.test.context.junit4.rules.SpringClassRule$TestContextManagerCacheEvictor.evaluate(SpringClassRule.java:230)
        at org.junit.rules.RunRules.evaluate(RunRules.java:20)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
        at org.mockito.internal.runners.JUnit45AndHigherRunnerImpl.run(JUnit45AndHigherRunnerImpl.java:37)
        at org.mockito.runners.MockitoJUnitRunner.run(MockitoJUnitRunner.java:62)
        at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:369)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:275)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:239)
        at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:160)
        at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:373)
        at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:334)
        at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:119)
        at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:407) [ERROR] Tests run: 2, Failures: 0, Errors: 2, Skipped: 0, Time elapsed: 1.381 s <<< FAILURE! - in com.example.MySpring4RunnerTest [ERROR] testBeanNames(com.example.MySpring4RunnerTest)  Time elapsed:
0.067 s  <<< ERROR! java.lang.ArrayIndexOutOfBoundsException: 1

[ERROR] com.example.MySpring4RunnerTest  Time elapsed: 0.146 s  <<< ERROR! java.lang.ArrayIndexOutOfBoundsException: 6

[INFO] [INFO] Results: [INFO] [ERROR] Errors: [ERROR]   MySpring4RunnerTest.com.example.MySpring4RunnerTest ▒ ArrayIndexOutOfBounds [ERROR]   MySpring4RunnerTest.testBeanNames ▒ ArrayIndexOutOfBounds 1 [INFO] [ERROR] Tests run: 2, Failures: 0, Errors: 2, Skipped: 0 [INFO] [INFO]
------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO]
------------------------------------------------------------------------

如您所見,異常與我的代碼本身無關,但與測試上下文相關。 實際上,它似乎與surefire插件相關聯,因為此測試可從Eclipse正確運行,但無法從命令行運行。

我正在使用的環境還包含:

  • Maven v.3.3.9
  • jUnit:4.12(我也嘗試過使用jUnit 5,沒有運氣的老式模式)。
  • maven-surefire-plugin:2.20.1(2.19.1版產生相同的結果)。
  • Eclipse配置為使用外部Maven 3.3.9,而不使用m2e插件隨附的任何東西。

有沒有人經歷過類似的行為? 有沒有解決此問題的方法?

先謝謝您的幫助

更新01/19/2018:

我已將測試最小化為:

@ContextConfiguration(classes = {MySpring4RunnerTest.MyConfig.class})
@RunWith(SpringJUnit4ClassRunner.class)
public class MySpring4RunnerTest {

  @Autowired
  private ApplicationContext appCtx;

  @Test
  public void testBeanNames() {
    String[] beans = this.appCtx.getBeanDefinitionNames();
    Arrays.sort(beans);
    System.out.println("\nSpring Managed Beans:");
    Stream.of(beans).forEach(it -> System.out.println(it));    
  }

  @Configuration
  static class MyConfig {
  }
}

沒有Mockito或參數化的運行器,只有SpringJUnit4ClassRunner(SpringRunner沒有區別),我得到的完整堆棧跟蹤如下所示:

2018-01-19 11:38:06,561 ERROR [main] org.springframework.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@17d919b6] to prepare test instance [com.example.MySpring4RunnerTest@6ca18a14]
java.lang.ArrayIndexOutOfBoundsException: 1
        at org.springframework.test.context.TestExecutionListener.prepareTestInstance(TestExecutionListener.java:96)
        at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:242)
        at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:227)
        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:246)
        at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
        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:363)
        at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)
        at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:369)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:275)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:239)
        at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:160)
        at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:373)
        at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:334)
        at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:119)
        at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:407)
2018-01-19 11:38:06,607 WARN  [main] org.springframework.test.context.TestContextManager - Caught exception while invoking 'afterTestClass' callback on TestExecutionListener [org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@222a59e6] for test class [class com.example.MySpring4RunnerTest]
java.lang.ArrayIndexOutOfBoundsException: 6
        at org.springframework.test.context.TestExecutionListener.afterTestClass(TestExecutionListener.java:201)
        at org.springframework.test.context.TestContextManager.afterTestClass(TestContextManager.java:481)
        at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:77)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
        at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)
        at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:369)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:275)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:239)
        at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:160)
        at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:373)
        at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:334)
        at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:119)
        at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:407)
2018-01-19 11:38:06,608 WARN  [main] org.springframework.test.context.TestContextManager - Caught exception while invoking 'afterTestClass' callback on TestExecutionListener [org.springframework.test.context.transaction.TransactionalTestExecutionListener@7d61eb55] for test class [class com.example.MySpring4RunnerTest]
java.lang.ArrayIndexOutOfBoundsException: 6
        at org.springframework.test.context.TestExecutionListener.afterTestClass(TestExecutionListener.java:201)
        at org.springframework.test.context.TestContextManager.afterTestClass(TestContextManager.java:481)
        at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:77)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
        at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)
        at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:369)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:275)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:239)
        at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:160)
        at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:373)
        at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:334)
        at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:119)
        at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:407)
2018-01-19 11:38:06,612 WARN  [main] org.springframework.test.context.TestContextManager - Caught exception while invoking 'afterTestClass' callback on TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@53f3bdbd] for test class [class com.example.MySpring4RunnerTest]
java.lang.ArrayIndexOutOfBoundsException: 6
        at org.springframework.test.context.TestExecutionListener.afterTestClass(TestExecutionListener.java:201)
        at org.springframework.test.context.TestContextManager.afterTestClass(TestContextManager.java:481)
        at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:77)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
        at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)
        at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:369)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:275)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:239)
        at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:160)
        at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:373)
        at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:334)
        at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:119)
        at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:407)
2018-01-19 11:38:06,624 WARN  [main] org.springframework.test.context.TestContextManager - Caught exception while invoking 'afterTestClass' callback on TestExecutionListener [org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@17d919b6] for test class [class com.example.MySpring4RunnerTest]
java.lang.ArrayIndexOutOfBoundsException: 6
        at org.springframework.test.context.TestExecutionListener.afterTestClass(TestExecutionListener.java:201)
        at org.springframework.test.context.TestContextManager.afterTestClass(TestContextManager.java:481)
        at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:77)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
        at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)
        at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:369)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:275)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:239)
        at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:160)
        at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:373)
        at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:334)
        at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:119)
        at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:407)
2018-01-19 11:38:06,624 WARN  [main] org.springframework.test.context.TestContextManager - Caught exception while invoking 'afterTestClass' callback on TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@62656be4] for test class [class com.example.MySpring4RunnerTest]
java.lang.ArrayIndexOutOfBoundsException: 6
        at org.springframework.test.context.TestExecutionListener.afterTestClass(TestExecutionListener.java:201)
        at org.springframework.test.context.TestContextManager.afterTestClass(TestContextManager.java:481)
        at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:77)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
        at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)
        at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:369)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:275)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:239)
        at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:160)
        at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:373)
        at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:334)
        at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:119)
        at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:407)
[ERROR] Tests run: 2, Failures: 0, Errors: 2, Skipped: 0, Time elapsed: 0.982 s <<< FAILURE! - in com.example.MySpring4RunnerTest
[ERROR] testBeanNames(com.example.MySpring4RunnerTest)  Time elapsed: 0.043 s  <<< ERROR!
java.lang.ArrayIndexOutOfBoundsException: 1

[ERROR] com.example.MySpring4RunnerTest  Time elapsed: 0.045 s  <<< ERROR!
java.lang.ArrayIndexOutOfBoundsException: 6

[INFO]
[INFO] Results:
[INFO]
[ERROR] Errors:
[ERROR]   MySpring4RunnerTest.com.example.MySpring4RunnerTest ▒ ArrayIndexOutOfBounds
[ERROR]   MySpring4RunnerTest.testBeanNames ▒ ArrayIndexOutOfBounds 1
[INFO]
[ERROR] Tests run: 2, Failures: 0, Errors: 2, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------

如果我所做的唯一更改是將春季測試版本5.0.2.RELEASE更改為4.3.13.RELEASE,並將其他所有內容都保持為5.0.2.RELEASE,則它將起作用。 無論我使用什么版本,它都可以在Eclipse上運行。 我認為這是因為Eclipse無法通過surefire運行測試。

我面臨着同樣的問題。 原來是我項目中配置的Jacoco的舊版本引起的。 在檢測接口時,它無法與具有默認方法的接口一起正常使用。 一旦我將Jacoco升級到

<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifact>
<version>0.8.2-SNAPSHOT</version>

問題已經解決。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM