android - Espresso 测试中 RecyclerView 出现 NoSuchMethodError

标签 android android-recyclerview nosuchmethoderror android-espresso

目前我正在尝试使用 RecyclerView 测试 View 。应用程序运行得很好,但是在测试中却不行,找不到RecyclerView的方法,以下是测试文件中的依赖

androidTestCompile ('com.android.support.test.espresso:espresso-core:2.0') {
    exclude group: 'javax.inject'
    exclude group: 'com.google.code.findbugs'
    exclude group: 'com.android.support', module: 'support-v4'
}
androidTestCompile('com.android.support.test.espresso:espresso-contrib:2.0') {
    exclude group: 'javax.inject'
    exclude group: 'com.google.guava'
    exclude group: 'com.android.support', module: 'support-annotations'
    exclude module: 'recyclerview-v7'
}

当我使用RecyclerViewActions.actionOnItemAtPosition时出现错误,它会调用RecyclerView的scrollToPosition()方法。但它提示找不到这个方法:

java.lang.NoSuchMethodError: android.support.v7.widget.RecyclerView.scrollToPosition
at android.support.test.espresso.contrib.RecyclerViewActions$ScrollToPositionViewAction.perform(RecyclerViewActions.java:397)
at android.support.test.espresso.contrib.RecyclerViewActions$ActionOnItemAtPositionViewAction.perform(RecyclerViewActions.java:277)
at android.support.test.espresso.ViewInteraction$1.run(ViewInteraction.java:144)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)
....

我认为问题是,由于它在应用程序中运行良好,因此在测试中,它可能使用比应用程序旧的版本。对于测试依赖项,recyclerView 的版本为 21.0.3,应用程序版本为 22.2.0。但是,当我将RecyclerView的应用程序版本更改为21.0.3(与测试中相同)后,它仍然出现相同的错误。

非常感谢任何评论

最佳答案

好吧,经过两天的查找,终于找到了解决办法。和Proguard有关系。事实证明,RecyclerView 被 Android Proguard 混淆了。这就是为什么 Espresso 找不到这个方法的原因。

只需添加

-keep class android.support.v7.widget.RecyclerView { *; }

在 proguard-rules.text 中,然后就完成了。

关于android - Espresso 测试中 RecyclerView 出现 NoSuchMethodError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33179537/

相关文章:

android - 具有重叠元素的 RecyclerView

android - 避免在 recyclerview gridlayoutmanager 中滚动第一行和第一列

android - RecyclerView 项目 View 隐藏/显示

java - 使用 JAVA 反射时出现 NoSuchMethodException

java - Arraylist 将最后一个元素读取为倒数第二个元素

php - 我如何解析json数组?

android - 以编程方式设置 CardView 海拔

java - 如何从 URL 加载不带扩展名的图像

java - NoSuchMethod 异常

java - Java测试失败,因为NoSuchMethodError