2016-07-29 5 views
3

So danach auf meinen Tests Aufruf der recyclerview Layout:Unit Testing RecyclerView OnItemTouchListener Robolectric

recyclerView.addOnItemTouchListener(listener); 
recyclerView.measure(0, 0); 
recyclerView.layout(0, 0, 100, 10000); 

und mein OnItemTouchListener Wesen:

listener = new RecyclerOnTouchListener(this, new RecyclerOnTouchListener.OnItemClickListener() { 
         @Override 
         public void onItemClick(View v, int position) { 
          Toast.makeText(this, "Sample toast", Toast.LENGTH_SHORT).show(); 
         } 
        }); 

und ich behaupten wollen:

Assertions.assertThat(ShadowToast.getTextOfLatestToast()).isEqualToIgnoringCase("Sample Toast"); 

Ich muss Artikel Klicks auf der Recyclerview simulieren. Und was ich tue, ist dies:

recyclerView.findViewHolderForAdapterPosition(0).itemView.performClick(); 
recyclerView.performClick() 

und sie beide falsch zurückgeben, was bedeutet, kein Onclick Hörer in ihnen genannt wird.

Wie testen wir wirklich OnItemTouchListener in Recyclerview? In Robolectric?

Jede Hilfe wäre willkommen. Vielen Dank!

Antwort

0

Ich hatte ein ähnliches Problem, das durch Hinzufügen der Zeile vor setAdapter fixiert wurde:

recyclerView.setLayoutManager(LinearLayoutManager(this)) 
0

Ich habe auf das gleiche Problem laufen in und während ich habe jede gute Lösung für das Problem gefunden, ich habe einen Workaround, der zumindest das Testen ermöglicht, bis ich etwas besseres finde.

Eine Sache, die Sie tun können, ist eine Methode in Ihrer Aktivität zu erstellen und den OnClick-Listener direkt aufrufen zu lassen.

void recyclerOnClick(View view, int position) { 
    Toast.makeText(this, "Click", Toast.LENGTH_SHORT).show(); 
} 

void addTouchListener() { 
    RecyclerOnTouchListener touchListener = new RecyclerOnTouchListener(this, recyclerView, 
      new RecyclerOnTouchListener.OnItemClickListener() { 
       @Override 
       public void onClick(@NotNull View view, int position) { 
        recyclerOnClick(view, position); 
       } 
      }); 
    recyclerView.addOnItemTouchListener(touchListener) 
} 

Dann in Ihren Tests können Sie rufen Sie einfach adapter.recyclerOnClick() für die Ansicht, die Sie auf den Klick simulieren möchten.