在 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 根本不会更改更新[启动应用程序时正常工作]。
如有任何帮助,我将不胜感激。
@Rule
@JvmField
var mInstantTaskExecutorRule = InstantTaskExecutorRule()
我是测试和 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 根本不会更改更新[启动应用程序时正常工作]。
如有任何帮助,我将不胜感激。
@Rule
@JvmField
var mInstantTaskExecutorRule = InstantTaskExecutorRule()