Ali*_*old 5 android firebase android-espresso firebase-realtime-database
我有一个LoginActivity
,firebase
用作后端。当我成功登录后,我的MainActivity
显示成功。
如何针对此活动更改编写 Espresso 测试?
Espresso 跟踪当前活动本身的普通方式似乎只适用于不需要等待 firebase 的活动。在使用 firebase auth 时使用它时,我收到此错误消息:
android.support.test.espresso.NoMatchingViewException:在层次结构中没有找到匹配的视图:id:(我的应用程序包):id/button2
(button2 是新活动中按钮的 id,但这发生在我试图在新活动中到达的任何视图)
我也尝试使用 ActivityMonitor 和类似的方法。它们似乎根本没有获取任何活动更改。
Thread.sleep()
给人的印象与我想做的完全相反:它似乎暂停了应用程序,而不是测试本身。
我知道我不应该测试 firebase 本身的功能,但是我的应用程序在很大程度上依赖于登录的用户,而且我稍后会编写其他测试来测试GUI
已登录用户的功能。
在firebaseauth
用于检查是否应该触发活动时,如何为活动变化编写正确的浓缩咖啡测试?
您需要使用 IdlingResource 类。Espresso 无法判断您的 UI 何时正在等待异步网络调用(例如 Firebase)。IdlingResource 正是为此目的而创建的。这是解决您的问题的一种方法。
例子:
import android.support.test.espresso.IdlingResource
import com.myexample.MainActivity
class LoginIdlingResource constructor(
private val mainActivity: MainActivity
) : IdlingResource{
private var resourceCallback: IdlingResource.ResourceCallback? = null
override fun getName(): String {
return LoginIdlingResource::class.java.name
}
override fun isIdleNow(): Boolean {
return !mainActivity.isInProgress() // <----- Important part
}
override fun registerIdleTransitionCallback(callback: IdlingResource.ResourceCallback?) {
this.resourceCallback = callback
}
}
Run Code Online (Sandbox Code Playgroud)
例子:
@get:Rule
val mActivityTestRule: ActivityTestRule<MainActivity> = ActivityTestRule(MainActivity::class.java)
@Before
fun init() { IdlingRegistry.getInstance()
.register(RegisterIdlingResource(mActivityTestRule.activity))
}
Run Code Online (Sandbox Code Playgroud)
现在,只要您的布尔值显示 isInProgress,Espresso 就会等待。
归档时间: |
|
查看次数: |
1606 次 |
最近记录: |