2016-03-16 16 views

Trả lời

8

Tôi đoán những gì bạn thực sự không thể kiểm tra là mã của bạn và nếu nó hoạt động như mong muốn bằng cách sử dụng các thành phần này.

Do phạm vi của câu hỏi của bạn là khá rộng, hãy để tôi cung cấp cho nó một use-case .:

Giả sử bạn có một mảnh với một RecyclerView, nơi có một LinearLayoutManager. Bạn muốn thử nghiệm nếu một nhấp chuột vào một trong các mục kích hoạt cuộc gọi phương thức đúng trên một lớp khác. (Hãy nói rằng bạn sử dụng MVP và đó là người dẫn chương trình)

Xét nghiệm có thể có thể giống như này .:

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

Xin lỗi vì cú pháp trước hết, tôi sử dụng Kotlin trong các thử nghiệm của tôi.

Tôi phải nói rằng mặc dù bản thân tôi không hài lòng 100% nhưng tôi cho rằng điều đó là hợp lý nếu bạn không kiểm tra giao tiếp chính xác của các lớp của mình.

+0

Tôi đã sử dụng '.measure' và' .layout' và không hoạt động trước, bây giờ nó hoạt động nhờ – david

+0

.measure và .layout cho phép getAdapterPosition hoạt động chính xác cho tôi – Shooky

Các vấn đề liên quan