¿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 ?

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() } 
  • La cobertura de código de estudio de Android no muestra ninguna class de Kotlin
  • Ejecute testings de Kotlin Koans desde Android Studio
  • Prueba unitaria de la function de extensión de Kotlin en las classs de Android SDK
  • Solo la primera testing pasa con TestScheduler cuando se ejecutan varias testings (Kotlin)
  • Comparta el código entre la testing unitaria y las testings de instrumentación cuando use kotlin
  • cómo acceder a las properties internas desde el código de testing java
  • Referencia no resuelta: DaggerTestComponent (Kotlin with Dagger for Test)
  • Kotlin coroutines unit testing usando mockito