2016-07-29 83 views
3

所以調用這個在我的測試中進行佈局recyclerview後:單元測試RecyclerView OnItemTouchListener Robolectric

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

和我OnItemTouchListener之中:

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

,我想斷言:

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

我需要模擬recyclerview上的物品點擊。我正在做的是這樣的:

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

它們都返回false,這意味着它們中沒有onclick監聽器被調用。

那麼我們如何真正在recyclerview中測試OnItemTouchListener?在Robolectric?

任何幫助,將不勝感激。謝謝!

回答

0

我有一個類似的問題,這是固定的setAdapter之前添加一行:

recyclerView.setLayoutManager(LinearLayoutManager(this)) 
0

我已經運行到了同樣的問題,雖然我還沒有找到什麼好的解決問題的辦法,我有一個解決方法,至少使測試成爲可能,直到我能找到更好的東西。

您可以做的一件事是在您的活動中創建一個方法,並直接使用onClick偵聽器調用。

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) 
} 

然後在您的測試,你可以叫adapter.recyclerOnClick()爲要模擬的點擊美景。

相關問題