Java 8方法参考中的NoClassDefFoundError

时间:2019-02-17 11:50:26

标签: android travis-ci android-espresso android-testing method-reference

我正在Travis CI的模拟器上运行Android工具测试。以下测试用例调用helper method per method reference

@Test
public void testGetLowEmissionZones_worksAtAll() {

    // ...

    lowEmissionZone.childZones.forEach(this::testChildZone);

    // ...

}

private void testChildZone(@NonNull ChildZone childZone) {
    // ...
}

Travis CI executes进行此测试时,它失败,并显示NoClassDefFoundError

ContentProviderTest > testGetLowEmissionZones_worksAtAll[test(AVD) - 4.3.1] FAILED 
    java.lang.NoClassDefFoundError: -$$Lambda$ContentProviderTest$He_xH9TsDaN0tZU8EqFP1CuQyAM
    at ContentProviderTest.testLowEmissionZone(ContentProviderTest.java:151)

如果我更改方法调用,则不会出现没有错误:

@Test
public void testGetLowEmissionZones_worksAtAll() {

    // ...

    for (ChildZone childZone : lowEmissionZone.childZones) {
            testChildZone(childZone);
    }

    // ...

}

我尝试了 openjdk8 oraclejdk8 都失败了。

如何继续使用方法引用?

1 个答案:

答案 0 :(得分:1)

您可能会遇到此问题,因为Jelly Bean中没有forEach(Consumer<?> consumer)

如您所见,测试在4.3.1。上失败。确保这与AVD的API级别相关。确保代码从API级别24开始开始正常工作。