dav*_*vid 8 android robolectric android-recyclerview
如何在Robolectric中对RecyclerView,ScrollListener,LinearLayoutManager进行单元测试?
我是一个相当新的测试,但我真的想模仿手势,特别是滚动.
Ost*_*tan 15
我猜你真正想要测试的是你的代码,如果它使用这些组件表现得很好.
由于你的问题范围很广,让我给它一个用例:
假设你有一个带有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)
}
}
Run Code Online (Sandbox Code Playgroud)
对不起语法首先,我在测试中使用Kotlin.
我不得不说,虽然我自己并不是100%满意,但我认为如果你不想测试你的图层的正确沟通是合理的.
| 归档时间: |
|
| 查看次数: |
5180 次 |
| 最近记录: |