从一个 FragmentScenario 设置片段以便从 DataBindingIdlingResource 中使用的问题

4

我正在跟随这个Google Codelab,在第8页(任务:使用数据绑定进行端到端测试)的第8步(编写DataBindingIdlingResource),您需要创建一个名为DataBindingIdlingResource.kt的文件。

class DataBindingIdlingResource : IdlingResource {
    [...]
}

private fun View.getBinding(): ViewDataBinding? = DataBindingUtil.getBinding(this)

/**
 * Sets the activity from an [ActivityScenario] to be used from [DataBindingIdlingResource].
 */
fun DataBindingIdlingResource.monitorActivity(
    activityScenario: ActivityScenario<out FragmentActivity>
) {
    activityScenario.onActivity {
        this.activity = it
    }
}

/**
 * Sets the fragment from a [FragmentScenario] to be used from [DataBindingIdlingResource].
 */
fun DataBindingIdlingResource.monitorFragment(fragmentScenario: FragmentScenario<out Fragment>) {
    fragmentScenario.onFragment {
        this.activity = it.requireActivity()
    }
}
问题: 最后一个函数fun DataBindingIdlingResource.monitorFragment存在问题,因为fragmentScenario.onFragment只提供了onFragment(action: Nothing)而不是onFragment {}如何解决这个问题? 谢谢。

我遇到了同样的问题,不明白为什么类型被标记为Nothing - 你解决了吗? - dazza5000
该定义未显示Nothing类型。https://developer.android.com/reference/kotlin/androidx/fragment/app/testing/FragmentScenario#onfragment - dazza5000
1
https://issuetracker.google.com/issues/155557836 - dazza5000
2个回答

7

我通过更改定义来解决了这个问题。

fun <T : Fragment> DataBindingIdlingResource.monitorFragment(fragmentScenario: FragmentScenario<T>) {

4
fun DataBindingIdlingResource.monitorFragment(fragmentScenario: FragmentScenario<Fragment>) {
  fragmentScenario.onFragment { fragment ->
      this.activity = fragment.requireActivity()
  }
}

这对我来说有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接