2016-07-29 82 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()为要模拟的点击美景。

相关问题