2016-08-08 19 views
4

私はmyObjectmyObjectFunctionを呼び出したことを確認するためにUnitTestをmyFunctionにしたい`runOnUiThread`でラップされたテストコードをどのようにユニット化しますか?

fun myFunction(myObject: MyClass, view: MyView) { 
    // Do something 
    view.getActivity().runOnUiThread { 
     myObject.myObjectFunction() 
    } 
} 

以下のようrunOnUiThreadを呼び出す関数を持っています。しかし、それがrunOnUiThreadにラップされているとすれば、私はそれに到達できません。

runOnUiThreadのコードが確実に呼び出されるように単体テストをテストするにはどうすればよいですか?

答えて

3

ArgumentCaptorを使用してテストを実行する方法を見つけるために管理します。 runOnUiThread()機能のRunnableをキャプチャし、実行を開始します。runOnUiArgCaptor.value.run()

import com.nhaarman.mockito_kotlin.argumentCaptor 
import com.nhaarman.mockito_kotlin.verify 
import com.nhaarman.mockito_kotlin.whenever 
import org.junit.Before 
import org.junit.Test 
import org.mockito.Mock 

@Mock lateinit var activity: Activity 
@Mock lateinit var view: MyView 
@Mock lateinit var myObject: MyObject 

@Before 
fun setUp() { 
    MockitoAnnotations.initMocks(this) 
} 

@Test 
fun my_test_function() { 
    whenever(view.getActivity()).thenReturn(activity) 

    val runOnUiArgCaptor = argumentCaptor<Runnable>() 
    val myTestObject = TestObject() 

    myTestObject.myFunction(myObject, view) 
    verify(activity).runOnUiThread(runOnUiArgCaptor.capture()) 
    runOnUiArgCaptor.value.run() 

    verify(myObject).myObjectFunction() 

} 
関連する問題