Surefire 2.6からSurefire 2.13にアップグレードすると、単体テストを実行するとTypeNotPresentExceptionProxy
が表示されます。
Java.lang.ArrayStoreException: Sun.reflect.annotation.TypeNotPresentExceptionProxy
at Sun.reflect.annotation.AnnotationParser.parseClassArray(AnnotationParser.Java:653)
at Sun.reflect.annotation.AnnotationParser.parseArray(AnnotationParser.Java:460)
at Sun.reflect.annotation.AnnotationParser.parseMemberValue(AnnotationParser.Java:286)
at Sun.reflect.annotation.AnnotationParser.parseAnnotation(AnnotationParser.Java:222)
at Sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.Java:69)
at Sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.Java:52)
at Java.lang.Class.initAnnotationsIfNecessary(Class.Java:3070)
at Java.lang.Class.getAnnotation(Class.Java:3029)
at org.Apache.maven.surefire.common.junit4.JUnit4TestChecker.isValidJUnit4Test(JUnit4TestChecker.Java:64)
JUnit4TestChecker
では、64行目は次のようになります。
Annotation runWithAnnotation = testClass.getAnnotation( runWith );
したがって、Surefireは@RunWith
アノテーションを検査して、そのタイプが有効であることを確認します。テストではSpringを使用しているため、テストクラスでは@RunWith
は次のようになります。
@RunWith(SpringJUnit4ClassRunner.class)
SurefireがSpringJUnit4ClassRunner
クラスを見つけられないようです。 Surefire 2.6でテストが正常に実行された理由がわかりません。
何か案は?
Mvn dependency:resolveを実行します。
侵入した可能性のあるJUnitの3.xバージョンを除外します。
TestNG依存関係がないことを確認してください。依存している場合、必要なJUnitアノテーションではなくTestNGアノテーションがロードされます。