Android Studio 1.1.0 + Robolectric 2.4导致java.lang.annotation.AnnotationFormatError

时间:2015-02-27 14:49:23

标签: java android testing android-studio robolectric

我尝试在我的项目中运行Robolectric测试。

我正在使用带有单元测试支持的Andriod Studio 1.1.0(http://tools.android.com/tech-docs/unit-testing-support),并且我正在执行与https://github.com/robolectric/deckard-gradle项目类似的所有操作。

当我尝试在Android Studio中运行测试时,我收到以下错误:

Exception in thread "main" java.lang.annotation.AnnotationFormatError: Invalid default: public abstract java.lang.Class org.robolectric.annotation.Config.application()
    at java.lang.reflect.Method.getDefaultValue(Method.java:747)
    at sun.reflect.annotation.AnnotationType.<init>(AnnotationType.java:117)
    at sun.reflect.annotation.AnnotationType.getInstance(AnnotationType.java:84)
    at sun.reflect.annotation.AnnotationParser.parseAnnotation(AnnotationParser.java:221)
    at sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:88)
    at sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:70)
    at java.lang.Class.initAnnotationsIfNecessary(Class.java:3178)
    at java.lang.Class.getAnnotation(Class.java:3137)
    at com.intellij.junit4.JUnit4TestRunnerUtil.buildRequest(JUnit4TestRunnerUtil.java:199)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:39)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:211)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:67)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)

有关于这个原因的想法吗?

修改

我改变了我的测试以使用自定义测试运行器类而不是RobolectricTestRunner和@Config注释,现在我得到了:

java.lang.RuntimeException: java.lang.ClassNotFoundException: android.app.Application

这似乎也是上述AnnotationFormatError的原因。

编辑2:

我能够找到解决方法,但我仍然不知道问题的确切原因。我跑的时候

gradlew clean test

从命令行,我没有得到AnnotationFormatError,之后,测试可以在AndroidStudio中运行而不会出现问题。如果我使用@Config或自定义测试运行器类也没关系。在每个&#34;清洁项目&#34;之后我必须进行&#34; gradlew清洁测试&#34;使它工作。

2 个答案:

答案 0 :(得分:0)

为了减少信息,我猜...你的Android项目包含一个使用appcompat的库模块。如果这是正确的,它在https://github.com/nenick/AndroidStudioAndRobolectric/issues/4

看起来就像是同一个问题

短:用简单的FragmentActivity替换ActionBarActivity或切换到Robolectric 3.0-SNAPSHOT

答案 1 :(得分:0)

对我来说问题是我的gradle文件中的compileSdkVersion设置为21,因为Robolectric没有正式支持21(他们现在处于测试阶段的版本3)我将其更改为18并且它现在有效。