2015-02-27 3 views
2

Я пытаюсь запустить Robolectric тесты в своих проектах.Android Studio 1.1.0 + Robolectric 2.4 вызывает java.lang.annotation.AnnotationFormatError

Я использую 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) 

Любая идея о причине?

EDIT:

Я изменил мой тест, чтобы использовать пользовательский тест бегун класс вместо RobolectricTestRunner и @Config аннотацию и теперь я получаю:

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

, который, кажется, и быть причина выше AnnotationFormatError.

EDIT 2:

мне удалось найти обходной путь, хотя до сих пор я не знаю точную причину проблемы. Когда я бегу

gradlew clean test

из командной строки, я не получаю AnnotationFormatError и после этого, тесты могут быть запущены в AndroidStudio без проблем. Также не имеет значения, использую ли я @Config или собственный класс тестового runner. Кроме того, после каждого «чистого проекта» я должен запустить «градульный чистый тест», чтобы он работал.

+0

отправьте способ установки вашего тестового примера. –

+0

Можете ли вы поделиться одним из ваших источников тестового класса? –

ответ

0

Для получения дополнительной информации, но я думаю ... Ваш проект Android содержит библиотечный модуль, который использует appcompat. Когда это правильно, похоже, тот же вопрос на https://github.com/nenick/AndroidStudioAndRobolectric/issues/4

Short: Заменить ActionBarActivity с простым FragmentActivity или переключиться на Robolectric 3.0-SNAPSHOT

+0

вот vanniktech от Github (кто создал проблему №4), я также получил эту странную «AnnotationFormatError» при некоторых обстоятельствах и не смог ее исправить – Niklas

+0

@Niklas Попробуйте запустить «gradlew clean test» из командной строки. Вы также получаете «AnnotationFormatError» из командной строки? Если нет, запустите затем тесты в Android Studio - вы все еще получаете 'AnnotationFormatError'? – bogumil

+0

@nenick Да, у меня есть проект библиотеки, который использует 'com.android.support: support-v4: 21.0.0', но я не использую ActionBarActivity. – bogumil

0

Вопрос для меня было то, что compileSdkVersion в моем Gradle файл был установлен в 21 и поскольку Robolectric официально не поддерживает 21 (они делают с версией 3, которая сейчас находится в бета-версии), я изменил ее на 18, и теперь она работает.

+0

Если вам нравится, версия robolectric snaphsot хороша. Я переключился со сложным приложением на sdk 21 и с 2.4 до 3.0-SNAPSHOT, и он работает намного лучше;) Но я бы предложил создать свой собственный более стабильный робоэлектрический релиз и зависеть от этого. – nenick

Смежные вопросы