Domyślam się, że naprawdę nie będziecie sprawdzać kodu, a jeśli zachowa się to zgodnie z oczekiwaniami za pomocą tych komponentów.
Ponieważ zakres swoje pytanie jest dość szeroki, pozwól mi dać to przypadków użycia .:
Załóżmy masz fragment z RecyclerView, która ma LinearLayoutManager. Chcesz przetestować, czy kliknięcie jednego z elementów uruchamia właściwe wywołanie metody na innej warstwie. (Powiedzmy użyć MVP i to jest prezenter)
Ewentualna próba mogłaby wyglądać następująco .:
@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)
}
}
żal składni przede wszystkim używam Kotlin w moich testów.
Muszę powiedzieć, że nie jestem w 100% zadowolony z tego sam, ale uważam, że jest to uzasadnione, jeśli nie chcesz przetestować poprawnej komunikacji twoich warstw.
Użyłem '.measure' i' .layout' i nie działa wcześniej, teraz działa dzięki – david
.measure i .layout dozwolone getAdapterPosition do pracy poprawnie dla mnie – Shooky