¿Cómo un código de testing unitaria envuelto en `runOnUiThread`?

Tengo una function que llama runOnUiThread como abajo

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

Quiero UnitTest myFunction para asegurar que myFunction ha llamado a myObjectFunction . Pero dado que es wrap en runOnUiThread , no puedo acceder a él.

¿Cómo puedo probar la unidad para garantizar que se runOnUiThread códigos dentro de runOnUiThread ?

Solutions Collecting From Web of "¿Cómo un código de testing unitaria envuelto en `runOnUiThread`?"

Administre para encontrar una manera de realizar la testing usando ArgumentCaptor . Capture Runnable en la function runOnUiThread() y luego active la ejecución a través de 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() }