Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Studio 1.1.0+;Robolectric 2.4导致java.lang.annotation.AnnotationFormatError_Java_Android_Testing_Android Studio_Robolectric - Fatal编程技术网

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

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

我试着在我的项目中运行机器人分子测试

我正在使用AndriodStudio 1.1.0和单元测试支持(),我正在做与project类似的事情

当我尝试在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)
线程“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,效果更好;)但我建议你自己创造更稳定的机器人分子释放,并以此为基础。