如何测试包装在`runOnUiThread`中的代码?

我有一个函数调用runOnUiThread如下

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

我想单元测试myFunction以确保myObject已经调用myObjectFunction 。 但是鉴于它是在runOnUiThread包装的,我无法得到它。

我怎么能单元测试,以确保runOnUiThread内的runOnUiThread被调用?

管理找到使用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() }