目前我正在尝试使用 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/