最初のアイテムが RecyclerView
という特別なラベルなしで見つかるはずの簡単なエスプレッソテストをしようとしています。エスプレッソでRecyclerViewアイテムをクリックしようとすると仮想メソッドが見つからない
androidTestCompile('com.android.support.test.espresso:espresso-contrib:2.2.2') {
// Necessary to avoid version conflicts
exclude group: 'com.android.support', module: 'appcompat'
exclude group: 'com.android.support', module: 'design'
exclude group: 'com.android.support', module: 'support-v4'
exclude group: 'com.android.support', module: 'appcompat-v7'
exclude group: 'com.android.support', module: 'support-annotations'
exclude module: 'recyclerview-v7'
}
と私のテストケースには、次の式を書いた: onView(withId(R.id.sresults_list_recycler)).perform(RecyclerViewActions.actionOnHolderItem(new FirstNotSoldOutMatcher(), click()).atPosition(1));
マッチャが完璧に動作してRecyclerView
がターゲット項目にスクロールしてしまったこれを実現するために、私はこのように投影するespresso-contrib
を追加しました。しかし、私はエラーが発生します:
java.lang.NoSuchMethodError: No virtual method findViewHolderForPosition(I)Landroid/support/v7/widget/RecyclerView$ViewHolder; in class Landroid/support/v7/widget/RecyclerView; or its super classes (declaration of 'android.support.v7.widget.RecyclerView' appears in /data/app/com.example-1/base.apk)
at android.support.test.espresso.contrib.RecyclerViewActions$ActionOnItemAtPositionViewAction.perform(RecyclerViewActions.java:288)
at android.support.test.espresso.contrib.RecyclerViewActions$ActionOnItemViewAction.perform(RecyclerViewActions.java:232)
at android.support.test.espresso.ViewInteraction$1.run(ViewInteraction.java:144)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:428)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
これは私には奇妙に見えます。私はGoogleの文書でfindViewHolderForPosition
メソッドが廃止されましたが、まだそこにあるはずです。私はまた、アプリでmultidexを有効にしているが、ドキュメントによれば、それはあまりにも問題ではないので、ボックスの外でサポートされています。
このテストで何が間違っているのでしょうか?
私は同じ問題を抱えていました(
proguardFiles
に記載されています)。この解決策は働きます。 –@Bershなぜ 'proguardFiles'では' testProguardFiles'ではなく?彼らはテストのためだけでなければなりません... – Caipivara
@Caipivara私は 'testProguardFiles'がテストコード(テストapk)にのみ適用可能であったことを覚えていますが、アプリケーション自体にメソッドを保持する必要があります – Bersh