2017-09-26 27 views
0

私はいくつかのテストケースを記述しようとしているSpring-MVCアプリケーションに取り組んでいます。現在、私は自分のサービスレイヤメソッドをautowiringしていて、メインクラスに@ImportResouceという注釈を付けています。私も@ContextConfigurationを試しましたが、テストのためにNPEを取得しました。私は間違って何をしていますか? JUNIT:4.1.2 - スコープテストとPOMで現在 春4.1.6 - POMで現在Java、Spring、Junit:テストで自動配線が失敗する

コード:

@RunWith(SpringJUnit4ClassRunner.class) 
@WebAppConfiguration 
@ImportResource(value = {"classpath*:WEB-INF/spring/appServlet/servlet-context.xml", 
     "classpath*:WEB-INF/spring/root-context.xml", "classpath*:WEB-INF/spring/appServlet/security-applicationContext.xml"}) 
@Ignore 
public class TestingController { 

    @Autowired 
    protected PersonService personService; 

    @Autowired 
    protected GroupAccountService groupAccountService; 

    @Autowired 
    protected GroupCanvasService groupCanvasService; 

    @Autowired 
    protected GroupSectionService groupSectionService; 

    @Autowired 
    protected GroupNotesService groupNotesService; 

    @Autowired 
    @Qualifier("authenticationManager") 
    protected AuthenticationManager am; 

    @After 
    public void clear() { 
     SecurityContextHolder.clearContext(); 
    } 

    protected void login(String name, String password) { 
     Authentication auth = new UsernamePasswordAuthenticationToken(name, password); 
     SecurityContextHolder.getContext().setAuthentication(am.authenticate(auth)); 
    } 

} 

ALLTESTS:

public class AllTests extends TestingController { 

    public static final String MAIL = "[email protected]"; 
    private Person person; 
    private GroupAccount groupAccount; 
    private GroupCanvas groupCanvas; 
    private GroupSection groupSection; 
    private GroupNotes groupNotes; 


    @Test 
    public void runTests() { 
     this.person = TestUtils.createPerson(MAIL); 
     int personId = this.personService.addPerson(this.person); 
     assertTrue(this.personService.getPersonById(personId).getUsername().equals(MAIL)); 
     login(MAIL, "PASSWORD"); 
     Person loggedInUser = this.personService.getCurrentlyAuthenticatedUser(); 
} 

エラーログ:

Running tests.AllTests 
16:51:17.817 [main] INFO o.s.t.c.w.WebTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [tests.AllTests] 
16:51:17.827 [main] INFO o.s.t.c.w.WebTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener] 
16:51:17.843 [main] INFO o.s.t.c.w.WebTestContextBootstrapper - Using TestExecutionListeners: [or[email protected]4ddced80, org.springframewor[email protected]1534f01b, org.springfra[email protected]78e117e3, org.springframew[email protected]2ea227af, org.sp[email protected]4386f16] 
16:51:17.852 [main] ERROR o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [or[email protected]4ddced80] to prepare test instance [[email protected]] 
java.lang.IllegalStateException: Failed to load ApplicationContext 
     at org.springframework.test.context.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:94) ~[spring-test-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
     at org.springframework.test.context.DefaultTestContext.getApplicationContext(DefaultTestContext.java:72) ~[spring-test-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
     at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:170) ~[spring-test-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
     at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:110) ~[spring-test-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
     at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:212) ~[spring-test-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
     at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:200) [spring-test-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
     at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:259) [spring-test-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
     at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) [junit-4.12.jar:4.12] 
     at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:261) [spring-test-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
     at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:219) [spring-test-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
     at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:83) [spring-test-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
     at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) [junit-4.12.jar:4.12] 
     at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) [junit-4.12.jar:4.12] 
     at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) [junit-4.12.jar:4.12] 
     at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) [junit-4.12.jar:4.12] 
     at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) [junit-4.12.jar:4.12] 
     at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) [spring-test-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
     at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:68) [spring-test-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
     at org.junit.runners.ParentRunner.run(ParentRunner.java:363) [junit-4.12.jar:4.12] 
     at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:163) [spring-test-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
     at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264) [surefire-junit4-2.17.jar:2.17] 
     at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153) [surefire-junit4-2.17.jar:2.17] 
     at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124) [surefire-junit4-2.17.jar:2.17] 
     at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200) [surefire-booter-2.17.jar:2.17] 
     at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153) [surefire-booter-2.17.jar:2.17] 
     at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103) [surefire-booter-2.17.jar:2.17] 
Caused by: java.lang.IllegalArgumentException: Cannot load an ApplicationContext with a NULL 'contextLoader'. Consider annotating your test class with @ContextConfiguration or @ContextHierarchy. 
     at org.springframework.util.Assert.notNull(Assert.java:112) ~[spring-core-4.1.7.RELEASE.jar:4.1.7.RELEASE] 
     at org.springframework.test.context.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:61) ~[spring-test-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
     at org.springframework.test.context.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:86) ~[spring-test-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
     ... 25 common frames omitted 
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.358 sec <<< FAILURE! - in tests.AllTests 
runTests(tests.AllTests) Time elapsed: 0.008 sec <<< ERROR! 
java.lang.IllegalStateException: Failed to load ApplicationContext 
     at org.springframework.test.context.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:94) 
     at org.springframework.test.context.DefaultTestContext.getApplicationContext(DefaultTestContext.java:72) 
     at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:170) 
     at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:110) 
     at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:212) 
     at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:200) 
     at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:259) 
     at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
     at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:261) 
     at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:219) 
     at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:83) 
     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:68) 
     at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
     at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:163) 
     at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264) 
     at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153) 
     at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124) 
     at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200) 
     at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153) 
     at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103) 
Caused by: java.lang.IllegalArgumentException: Cannot load an ApplicationContext with a NULL 'contextLoader'. Consider annotating your test class with @ContextConfiguration or @ContextHierarchy. 
     at org.springframework.util.Assert.notNull(Assert.java:112) 
     at org.springframework.test.context.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:61) 
     at org.springframework.test.context.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:86) 
     at org.springframework.test.context.DefaultTestContext.getApplicationContext(DefaultTestContext.java:72) 
     at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:170) 
     at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:110) 
     at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:212) 
     at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:200) 
     at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:259) 
     at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
     at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:261) 
     at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:219) 
     at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:83) 
     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:68) 
     at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
     at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:163) 
     at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264) 
     at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153) 
     at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124) 
     at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200) 
     at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153) 
     at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103) 


Results : 

Tests in error: 
    AllTests.runTests » IllegalState Failed to load ApplicationContext 

Tests run: 1, Failures: 0, Errors: 1, Skipped: 0 

ログ:ログは30000文字を超えるため、アップロードしていますペーストビンにhere

+1

この質問は、downvotedた理由downvoterを説明することができます。ありがとうございました。 –

+0

アプリケーションコンテキストの読み込みに失敗した理由、理由を確認したり、完全なログを提供しなかったのはなぜですか? – Barath

+0

@Barath:メインポストの下部にログが添付されています。 –

答えて

0

あなたの設定クラスに@Ignoreと注釈が付けられているのはなぜですか?

これは、@Ignoreというアノテーションがある可能性があります。

+0

これはテスト用の構成クラスであることを指定するために追加しました。私はそれを削除し、テストを実行しようと、まだ同じです。ありがとう –

+0

そして '@ WebAppConfiguration'を削除してみてください。私は設定クラスではなく、 'TestingController'を恐れています。 –

+0

申し訳ありませんが、まだ運がありません。メインポストの下部にあるログを確認できますか?ありがとう –

0

@ImportResourceの代わりに次を使用してください。

@TestPropertySource(locations = "classpath:./test.properties") 

@ContextConfiguration(initializers = AnyApplicationContextInitializer.class) 
+0

test.propertiesはどのファイルですか? ContextConfigurationにどのクラスを渡す必要がありますか?ありがとう。 –

+0

これは単なる例です。そこにすべてのプロパティファイルを渡すことができます。 AnyApplicationContextInitializerは独自のクラスです。 ApplicationContextInitializer を実装するものですが、オプションです。空にしておくことができます – AlexGera

+0

ImportResouceを削除してContextConfigurationを追加すると、autowiredに失敗しました。 TestPropertySourceも役に立ちませんでした。他のアイデア?ありがとう –

関連する問題