在 UI Espresso 测试中等待实时数据完成

Waiting for livedata to complete in UI Espresso test

我是测试和 Espresso 的新手,所以请多多包涵。

我有一个带有一些简单图像编辑功能的应用程序,我决定用 UI 测试来覆盖它。 对于初学者,我决定测试初始图像上传、处理和移动到下一个屏幕。

这是我到目前为止提出的测试:

@LargeTest
@RunWith(AndroidJUnit4::class)
class VerifyLoadImage {
    lateinit var testContext: Context

    @Rule
    @JvmField
    var mActivityTestRule = ActivityScenarioRule(MainActivity::class.java)

    @Before
    fun loadContext() {
        testContext = InstrumentationRegistry.getInstrumentation().context
    }

    @Test
    fun loadImageToCrop() {
        mActivityTestRule.scenario.onActivity { mainActivity ->

// get the activity

            val navigationFragment = mainActivity.supportFragmentManager.findFragmentById(R.id.fragmentContainer)

//verify that current fragment displayed is ImagePickerFragment
            val currentFragment = navigationFragment?.getDisplayedChildFragment()?.let { it as? ImagePickerFragment }
                ?: throw AssertionError("currentFragment is not instance of ImagePickerFragment")

//call the method to upload the image from input stream, process it and then navigate to the crop screen
            currentFragment.loadBitmapAndOpenCropScreen(AssetInputStreamProvider(testContext, "sample_image.jpg"))

//verify that crop screen is currently displayed
            assert(navigationFragment.getDisplayedChildFragment() is CropFragment)
        }
    }
}

private fun Fragment.getDisplayedChildFragment() = childFragmentManager.fragments.first()

这是currentFragment.loadBitmapAndOpenCropScreen

中的代码
    internal fun loadBitmapAndOpenCropScreen(inputStreamProvider: InputStreamProvider) {
        activityViewModel.loadBitmap(inputStreamProvider).observe(viewLifecycleOwner) {
            when (it) {
                Loading -> showLoading()
                is Success -> {
                    hideLoading()
                    findNavController().navigate(ImagePickerFragmentDirections.toCrop())
                }
                is Error -> hideLoading()
            }
        }
    }

问题是在测试时,LiveData 根本不会更改更新[启动应用程序时正常工作]。

如有任何帮助,我将不胜感激。

尝试InstantTaskExecutorRule

@Rule
@JvmField
var mInstantTaskExecutorRule = InstantTaskExecutorRule()