Android Studio 1.1.0+;Robolectric 2.4导致java.lang.annotation.AnnotationFormatError
我试着在我的项目中运行机器人分子测试 我正在使用AndriodStudio 1.1.0和单元测试支持(),我正在做与project类似的事情 当我尝试在Android Studio中运行测试时,我遇到以下错误:Android Studio 1.1.0+;Robolectric 2.4导致java.lang.annotation.AnnotationFormatError,java,android,testing,android-studio,robolectric,Java,Android,Testing,Android Studio,Robolectric,我试着在我的项目中运行机器人分子测试 我正在使用AndriodStudio 1.1.0和单元测试支持(),我正在做与project类似的事情 当我尝试在Android Studio中运行测试时,我遇到以下错误: Exception in thread "main" java.lang.annotation.AnnotationFormatError: Invalid default: public abstract java.lang.Class org.robolectric.annotati
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)
线程“main”java.lang.annotation.AnnotationFormatError中的异常:无效默认值:public abstract java.lang.Class org.roblectric.annotation.Config.application()
位于java.lang.reflect.Method.getDefaultValue(Method.java:747)
位于sun.reflect.annotation.AnnotationType。(AnnotationType.java:117)
位于sun.reflect.annotation.AnnotationType.getInstance(AnnotationType.java:84)
位于sun.reflect.annotation.AnnotationParser.parseAnnotation(AnnotationParser.java:221)
位于sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:88)
位于sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:70)
在java.lang.Class.InitAnnotationSifRequired处(Class.java:3178)
位于java.lang.Class.getAnnotation(Class.java:3137)
位于com.intellij.junit4.JUnit4TestRunnerUtil.buildRequest(JUnit4TestRunnerUtil.java:199)
位于com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:39)
位于com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:211)
位于com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:67)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)中
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:606)
位于com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
你知道原因吗
编辑:
我将测试更改为使用自定义测试运行器类,而不是RobolectrictTestRunner和@Config注释,现在我得到:
java.lang.RuntimeException:java.lang.ClassNotFoundException:android.app.Application
这似乎也是上述注释格式错误的原因
编辑2:
我能够找到解决办法,尽管我仍然不知道问题的确切原因。当我跑的时候
gradlew清洁测试
从命令行中,我不会得到AnnotationFormatError,在这之后,测试可以在AndroidStudio中运行而不会出现问题。另外,无论我使用@Config还是自定义测试运行器类,这都无关紧要。而且在每次“清洁项目”之后,我都必须运行“gradlew清洁测试”以使其工作。信息更少,但我想。。。您的Android项目包含一个使用appcompat的库模块。当这是正确的,它看起来像是在同一个问题
简而言之:将ActionBarActivity替换为一个简单的FragmentActivity或切换到Robolectric 3.0-SNAPSHOT我的问题是,我的gradle文件中的
compileSdkVersion
被设置为21,并且由于Robolectric不正式支持21(他们使用的是目前处于测试阶段的版本3)我把它改为18,现在可以使用了。发布测试用例的设置方法。你能分享一下你的测试类资源吗?这里是Github的vanniktech(他创建了第4期),在某些情况下,我还遇到了奇怪的注释格式错误
,无法修复it@Niklas尝试从命令行运行gradlew clean测试。您是否也从命令行获取AnnotationFormatError
?如果没有,请在Android Studio中运行然后测试-您是否仍然得到注释FormatError
?@nenick是的,我有一个库项目,它使用com.Android.support:support-v4:21.0.0
,但我没有使用ActionBarActivity。您使用了什么?你有什么例子吗?@nenick来自支持库,我正在使用Fragment、FragmentActivity和NotificationCompat。如果你愿意,robolectric snaphsot版本很稳定。我使用一个复杂的应用程序切换到sdk 21,并从2.4切换到3.0-SNAPSHOT,效果更好;)但我建议你自己创造更稳定的机器人分子释放,并以此为基础。