SpringのDIコンテナを利用してJUnitのテストコードを書こうとしています。テスト実行したところ、java.lang.IllegalStateException: Could not load CacheAwareContextLoaderDelegate [class org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate]
のエラーが出て、これがわかりませんでしたのでご助力をお願い致します。
テストコード、コンテキストファイルは下記です。
java
1package junit.tutorial; 2 3import org.junit.Test; 4import org.junit.runner.RunWith; 5import static org.junit.Assert.*; 6import static org.hamcrest.CoreMatchers.*; 7import org.springframework.beans.factory.annotation.Autowired; 8import org.springframework.test.context.ContextConfiguration; 9import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 10 11@RunWith(SpringJUnit4ClassRunner.class) 12@ContextConfiguration(locations="classpath:applicationContext-test.xml") 13public class CalculatorTest { 14 15 @Autowired 16 Calculator calc; 17 18 @Test 19 public void multiplyTest() { 20 //略 21 } 22 23}
xml
1<?xml version="1.0" encoding="UTF-8"?> 2<beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:beans="http://www.springframework.org/schema/beans" 5 xmlns:context="http://www.springframework.org/schema/context" 6 xsi:schemaLocation=" 7 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 8 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 9 <context:annotation-config /> 10 <context:component-scan base-package="junit.tutorial" /> 11</beans>
フルスタックトレース:
err
1java.lang.IllegalStateException: Could not load CacheAwareContextLoaderDelegate [class org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate] 2 at org.springframework.test.context.BootstrapUtils.createCacheAwareContextLoaderDelegate(BootstrapUtils.java:102) 3 at org.springframework.test.context.BootstrapUtils.createBootstrapContext(BootstrapUtils.java:68) 4 at org.springframework.test.context.TestContextManager.<init>(TestContextManager.java:105) 5 at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTestContextManager(SpringJUnit4ClassRunner.java:154) 6 at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<init>(SpringJUnit4ClassRunner.java:145) 7 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 8 at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 9 at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 10 at java.lang.reflect.Constructor.newInstance(Constructor.java:422) 11 at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104) 12 at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86) 13 at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) 14 at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26) 15 at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) 16 at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33) 17 at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createUnfilteredTest(JUnit4TestLoader.java:84) 18 at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:70) 19 at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:43) 20 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:444) 21 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) 22 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 23 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) 24Caused by: java.lang.NoSuchMethodError: org.springframework.beans.BeanUtils.instantiateClass(Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/Object; 25 at org.springframework.test.context.BootstrapUtils.createCacheAwareContextLoaderDelegate(BootstrapUtils.java:99) 26 ... 21 more
下記を参考にしています。
[Spring] Autowiredアノテーションを使っているクラスのユニットテスト - step by step
@ContextConfigurationでclasspathでファイル参照先を指定する - テックノート
必要な情報等あれば随時補足追記致します。よろしくお願い致します。
tkturboさんより頂いたご助言から、エラーの中のCaused by: java.lang.NoSuchMethodError: org.springframework.beans.BeanUtils.instantiateClass(Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/Object;
でサーチしました。これまでbuild.gradleを下記のようにしていたので
gradle
1dependencies { 2 //spring関連のみ抜粋 3 compile 'org.springframework:spring:2.5.6.SEC03' 4 compile 'org.springframework:spring-context:4.2.5.RELEASE' 5 compile 'org.springframework:spring-core:4.2.5.RELEASE' 6 7 testCompile 'org.springframework:spring-test:4.2.5.RELEASE' 8}
下記のように改めました
gradle
1ext { 2 springVersion='4.0.5.RELEASE' 3} 4 5dependencies { 6 compile 'org.springframework:spring:2.5.6.SEC03' 7 compile "org.springframework:spring-context:$springVersion" 8 compile "org.springframework:spring-core:$springVersion" 9 testCompile "org.springframework:spring-test:$springVersion" 10}
すると先ほどまでのエラーの部分の文言が少し変わり、Caused by: java.lang.NoSuchMethodError: org.springframework.core.annotation.AnnotationUtils.getAnnotationAttributes(Ljava/lang/annotation/Annotation;ZZ)Lorg/springframework/core/annotation/AnnotationAttributes;
これをみると
gradle
1compile 'org.springframework:spring:2.5.6.SEC03'
これが悪い気がしたので取り除きました。
例外を出さず動くようになりました。
参考:java.lang.NoSuchMethodError: org.springframework.core.annotation.AnnotationUtils.isInJavaLangAnnotationPackage(Ljava/lang/annotation/Annotation;)Z - Stack Overflow
悪い気がしたのでという書き方の通り、各アーティファクトが何の役割のものか理解がないので、ドキュメンテーションを見て少しずつわかるようにしたいと思います。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/11 04:55