unit testing方法失败,其中包含lambdaexpression式Android Studio

问题描述

我写了一个使用Lambdaexpression式的简单示例。 代码工作正常,直到我对它进行unit testing。 一旦我运行unit testing,它就会因为下面的错误而失败

环境

Android Studio 2.2预览版3

错误

编译器发生exception(1.8.0_76-release)。 在检查错误数据库( http://bugs.java.com )是否有重复项后,请通过Java错误报告页面( http://bugreport.java.com )向Java编译器提交错误。 在报告中包含您的计划和以下诊断。 谢谢。 com.sun.tools.javac.code.Symbol $ CompletionFailure:找不到java.lang.invoke.MethodType的类文件

:app:compileDebugJavaWithJavac FAILED

FAILURE:构建因exception而失败。

  • 出了什么问题:任务执行失败’:app:compileDebugJavaWithJavac’。

    编译失败; 请参阅编译器错误输出以获取详细信

  • 尝试:使用–stacktrace选项运行以获取堆栈跟踪。 使用–info或–debug选项运行以获取更多日志输出。

建筑失败

RxDefer.java

import rx.Observable; import rx.Subscriber; class RxDefer { private Observable getInt() { return Observable.create(new Observable.OnSubscribe() { @Override public void call(Subscriber 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' ) } 

正如我从您的依赖项中看到的那样,您正在使用android studio的Jack $ Jill编译器来使用lambdaexpression式。 我宁愿建议使用retrolambda 。 您可以查看此post,了解有关如何从此链接进行配置的更多信息。

retrolambda的好处:

您也可以使用它与构建工具版本低于24.0.0,这与jack编译器不同。

如上所述,这个问题在retrolambda中似乎已得到修复。

看起来像grade-retrolambda中的固定错误。 您是否将构建更新为当前版本?

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