单元测试RecyclerView OnItemTouchListener Robolectric

时间:2016-07-29 03:36:09

标签: android unit-testing android-recyclerview robolectric

因此,在我的测试中调用它来布局recyclerview:

HtmlHelper

和我的import { Toolbar, Data } from 'react-data-grid/addons'; const Selectors = Data.Selectors;

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

我想断言:

OnItemTouchListener

我需要在recyclerview上模拟项目点击。而我正在做的是:

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

并且它们都返回false,意味着没有调用onclick监听器。

那么我们如何在recyclerview中真正测试Assertions.assertThat(ShadowToast.getTextOfLatestToast()).isEqualToIgnoringCase("Sample Toast"); ?在Robolectric?

任何帮助将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:1)

我有一个类似的问题,通过在setAdapter之前添加行来修复:

    recyclerView.setLayoutManager(LinearLayoutManager(this))

答案 1 :(得分: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()