[英]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正確運行,但無法從命令行運行。
我正在使用的環境還包含:
有沒有人經歷過類似的行為? 有沒有解決此問題的方法?
先謝謝您的幫助
更新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.