Метод тестирования единицы измерения, который содержит выражение лямбда Android Studio

описание проблемы

Я написал простой пример, который использует выражение Lambda. Код работает нормально, пока я не запустил на нем единичный тест. Как только я запускаю модульный тест, он терпит неудачу из-за ошибки ниже

Окружающая среда

Android Studio 2.2 Preview 3

ошибка

Исключение произошло в компиляторе (1.8.0_76-release). Пожалуйста, сообщите об ошибке в отношении компилятора Java через страницу отчетов об ошибках Java ( http://bugreport.java.com ) после проверки базы данных ошибок ( http://bugs.java.com ) для дубликатов. Включите в отчет свою программу и следующую диагностику. Спасибо. Com.sun.tools.javac.code.Symbol $ CompletionFailure: файл класса для java.lang.invoke.MethodType не найден

: App: compileDebugJavaWithJavac FAILED

FAILURE: Сбой сборки с исключением.

  • Что пошло не так: выполнение завершилось неудачно для задачи ': app: compileDebugJavaWithJavac'.

    Ошибка компиляции; См. Вывод ошибки компилятора.

  • Попробуйте: запустите с опцией –stacktrace, чтобы получить трассировку стека. Запустите с опцией –info или –debug, чтобы получить больше выходных данных журнала.

СТРОГО НЕИСПРАВНО

RxDefer.java

import rx.Observable; import rx.Subscriber; class RxDefer { private Observable<Integer> getInt() { return Observable.create(new Observable.OnSubscribe<Integer>() { @Override public void call(Subscriber<? super Integer> aSubscriber) { if (aSubscriber.isUnsubscribed()) return; aSubscriber.onNext(42); aSubscriber.onCompleted(); } }); } void createDefer() { Observable.defer(RxDefer.this::getInt).subscribe(aInteger -> { System.out.println(String.valueOf(aInteger)); }); } } 

RxDeferTest.java

 @RunWith(PowerMockRunner.class) @PrepareForTest(RxDefer.class) public class RxDeferTest { @Test public void createDefer() { RxDefer defer = new RxDefer(); defer.createDefer(); } } 

build.gradle

 apply plugin: 'com.android.application' android { ... compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { ... testCompile( 'junit:junit:4.12' , 'org.robolectric:robolectric:3.0' , 'org.powermock:powermock-module-junit4:1.6.4' , 'org.powermock:powermock-module-junit4-rule:1.6.4' , 'org.powermock:powermock-api-mockito:1.6.4' , 'org.powermock:powermock-classloading-xstream:1.6.4' ) } 

Solutions Collecting From Web of "Метод тестирования единицы измерения, который содержит выражение лямбда Android Studio"

Как я могу видеть из ваших зависимостей, вы используете компилятор Jack $ Jill студии android для использования лямбда-выражений. Я бы предпочел использовать retrolambda . Вы можете проверить это сообщение для получения дополнительной информации о том, как настроить эту ссылку .

Бенифиты ретроламбы:

Вы можете использовать его также с версией инструмента сборки ниже 24.0.0, что не относится к компилятору jack.

И, как было предложено выше, этот вопрос кажется исправленным в ретроальбанде.

Похоже на фиксированную ошибку в классе-ретроальбанде. Вы обновили свою сборку до текущей версии?

https://github.com/evant/gradle-retrolambda/issues/23