gpt4 book ai didi

android - espresso 测试超时,测试未运行

转载 作者:行者123 更新时间:2023-11-29 01:12:49 25 4
gpt4 key购买 nike

有一个辅助类 DialogIdlingResource,我尝试通过它运行我的测试。测试进行了,除了这个。按下按钮后,一切都停止了。

AcceptanceHelper.clickOnButtonInLayout(R.id.mainSignButton, R.string.common_signin_button_text, R.id.inputLayout)

带有两个辅助方法的代码 fragment :

 @Test
fun signInUserWithInvalidEmail() {
goToSignIn()
AcceptanceHelper.updateValidationTextView(R.string.ui_data_attribute_email, "kokojambo@mail.ru")
AcceptanceHelper.updateValidationTextView(R.string.ui_data_attribute_password, VALID_PASSWORD)
AcceptanceHelper.clickOnButtonInLayout(R.id.mainSignButton, R.string.common_signin_button_text, R.id.inputLayout)
val idlingResource = DialogIdlingResource()
registerDialogIdlingResource()
unregisterDialogIdlingResource()
}
private fun registerDialogIdlingResource() {
val instrumentation = InstrumentationRegistry.getInstrumentation()
idlingResource = DialogIdlingResource()
Espresso.registerIdlingResources(idlingResource)
}


private fun unregisterDialogIdlingResource() {
Espresso.unregisterIdlingResources(idlingResource)
}

可能是regester和unregister(idlingResource)这两个方法导致的错误

但实际上应该可以,但可能是某个地方可能出错了,一​​个辅助类代码:

class DialogIdlingResource(private val waitTimeSeconds: Int = 5) : 

IdlingResource {
private var resourceCallback: IdlingResource.ResourceCallback? = null
private var startTime = -1L

override fun getName(): String {
return DialogIdlingResource::class.java.name
}

override fun isIdleNow(): Boolean {
if (startTime < 0) {
startTime = System.currentTimeMillis()
}
val timeOut = System.currentTimeMillis() - waitTimeSeconds * 1000 > startTime
if (timeOut)
throw TimeoutException("error")
val idle = !isDialogRunning
if (idle && resourceCallback != null) {
resourceCallback!!.onTransitionToIdle()
}
return idle
}

override fun registerIdleTransitionCallback(resourceCallback: IdlingResource.ResourceCallback) {
this.resourceCallback = resourceCallback
}

private val isDialogRunning: Boolean
get() {
try {
onView(Matchers.allOf(withId(R.id.titleTextView), ViewMatchers.withText("Warning")))
.check(ViewAssertions.matches(isDisplayed()))
} catch (e: NoMatchingViewException) {
e.printStackTrace()
System.out.println("some text")
}
return true
}

另外尝试解决下一个问题 solution .当我只运行一个测试时,所有的工作都很好。但是如果我开始所有测试,我就会发现错误。因为测试没有时间检查我对话框中的示例文本,所以他打开了对话框,仅此而已。

空闲资源类:

class ElapsedTimeIdlingResource(private val activity: SignActivity?) : IdlingResource {
private var callback: IdlingResource.ResourceCallback? = null

override fun getName(): String {
return "SignInScreenTest"
}

override fun isIdleNow(): Boolean {
val idle = isIdle
if (idle) callback!!.onTransitionToIdle()
return idle
}

val isIdle: Boolean
get() = activity != null && callback != null

override fun registerIdleTransitionCallback(resourceCallback: IdlingResource.ResourceCallback) {
this.callback = resourceCallback
}

在我的测试中

val activity = mActivityTestRule.getActivity()
val idlingResource = ElapsedTimeIdlingResource(activity)
Espresso.registerIdlingResources(idlingResource)
AcceptanceHelper.checkTextView(R.id.titleTextView, "Warning")

我再说一遍,就在我开始所有测试时,我需要在 registerIdlingResources 和 checktextView 之间休眠像这样的东西:

SystemClock.sleep(5000)

请帮忙解决这个问题。对不起我的英语。

最佳答案

抱歉,您的 IdlingResource 看起来像是 super 复杂的等待功能。

此代码 fragment 对我有用 - github link .您只需向 ViewVisibilityIdlingResource 构造函数提供所需的参数。其中之一是 int viewId 和另一个 int visibility。例如,如果您从对话框布局和可见性 View.GONE 中提供任何 viewId,那么此资源将阻止 Espresso 测试,直到 View 可见或向用户显示对话框.

关于android - espresso 测试超时,测试未运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41759873/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com