从here我们现在知道robolectric没有阴影对象但是我们可以为小吃吧创建一个自定义阴影对象。他们有一个用于烤面包但不用于零食吧。
当我没有网络连接时,我在代码中显示了一个小吃吧。我想知道如何编写单元测试(使用robolectric作为测试运行器),可以验证在没有网络连接时是否显示小吃栏。
它有点硬,因为小吃店不是xml。因此,当我声明我的实际活动控制器时,它当时没有小吃吧。
你知道如何测试吐司我们有ShadowToast.getTextOfLatestToast()
我想要一个用于snackBar
我目前正在使用org.robolectric:robolectric:3.0-rc2并且没有看到ShadowSnackbar.class可用。
答案 0 :(得分:3)
它在博客中实际解释了如何添加ShadowToast类以启用测试。
在您应用的代码中,当没有可用的互联网连接时,您将在Snackbar上呼叫。由于Snackbar作为Instrumented类的配置(例如拦截),将使用该类的Shadow-variant。您将能够在那一刻评估结果。
答案 1 :(得分:2)
我发布了很多simpler answer
你可以这样做:
val textView: TextView? = rootView.findSnackbarTextView() assertThat(textView, `is`(notNullValue()))
实现:
/**
* @return a TextView if a snackbar is shown anywhere in the view hierarchy.
*
* NOTE: calling Snackbar.make() does not create a snackbar. Only calling #show() will create it.
*
* If the textView is not-null you can check its text.
*/
fun View.findSnackbarTextView(): TextView? {
val possibleSnackbarContentLayout = findSnackbarLayout()?.getChildAt(0) as? SnackbarContentLayout
return possibleSnackbarContentLayout
?.getChildAt(0) as? TextView
}
private fun View.findSnackbarLayout(): Snackbar.SnackbarLayout? {
when (this) {
is Snackbar.SnackbarLayout -> return this
!is ViewGroup -> return null
}
// otherwise traverse the children
// the compiler needs an explicit assert that `this` is an instance of ViewGroup
this as ViewGroup
(0 until childCount).forEach { i ->
val possibleSnackbarLayout = getChildAt(i).findSnackbarLayout()
if (possibleSnackbarLayout != null) return possibleSnackbarLayout
}
return null
}