簡體   English   中英

如何在Robolectric中對RecyclerView,LinearLayoutManager進行單元測試?

[英]How do I unit test RecyclerView , LinearLayoutManager in Robolectric?

如何在Robolectric中對RecyclerView,ScrollListener,LinearLayoutManager進行單元測試?

我是一個相當新的測試,但我真的想模仿手勢,特別是滾動。

我想你真正想要測試的是你的代碼,如果它使用這些組件表現得如此。

由於你的問題范圍很廣,讓我給它一個用例:

假設你有一個帶有RecyclerView的片段,它有一個LinearLayoutManager。 您想要測試其中一個項目的單擊是否在另一個圖層上觸發正確的方法調用。 (假設您使用的是MVP,那就是演示者)

可能的測試看起來像這樣:

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

對不起語法首先,我在測試中使用Kotlin。

我不得不說,雖然我自己並不是100%滿意,但我認為如果你不想測試你的圖層的正確溝通是合理的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM