如何在Robolectric中对RecyclerView,LinearLayoutManager进行unit testing?

如何在Robolectric中对RecyclerView,ScrollListener,LinearLayoutManager进行unit testing?

对于这种testing,我相当新,但我真的很想模仿手势,特别是滚动。

Solutions Collecting From Web of "如何在Robolectric中对RecyclerView,LinearLayoutManager进行unit testing?"

我想你真的要testing的是你的代码,如果它使用这些组件的行为。

由于你的问题的范围很广,让我给它一个用例:

假设你有一个RecyclerView的片段,它有一个LinearLayoutManager。 你想要testing一个项目的点击是否触发了另一个层次上的正确的方法调用。 (比方说,你使用MVP,这是主持人)

一个可能的testing可能是这样的:

@RunWith(RobolectricGradleTestRunner::class) @Config(constants = BuildConfig::class, sdk = intArrayOf(21)) class MyFragmentTest { lateinit var fragment: MyFragment lateinit var activityController: ActivityController<FragmentActivity> @Before @Throws(Exception::class) fun setUp() { fragment = MyFragment() activityController = Robolectric.buildActivity(FragmentActivity::class.java) activityController.create().start().resume() activityController.get() .supportFragmentManager .beginTransaction() .add(fragment, null) .commit() } @Test @Throws(Exception::class) fun testClickEntry() { val recycler = fragment.view!!.findViewById(R.id.sideNavigationRecycler) as RecyclerView // workaround robolectric recyclerView issue recycler.measure(0,0) recycler.layout(0,0,100,1000) // lets just imply a certain item at position 0 for simplicity recycler.findViewHolderForAdapterPosition(0).itemView.performClick() // presenter is injected in my case, how this verification happens depends on how you manage your dependencies. verify(fragment.presenter).onEntryClicked(MyNavigationEntry.XYZ) } } 

对不起,语法首先,我在我的testing中使用Kotlin。

我不得不说,虽然我自己并不是100%满意,但如果你不想testing你的图层的正确沟通,我认为它是合理的。