テストを実行しようとする補助クラスDialogIdlingResourceがあります。このテスト以外はテストが行われます。ボタンを押すと、すべてが停止します。エスプレッソテストでタイムアウトしましたが、テストが実行されません
AcceptanceHelper.clickOnButtonInLayout(R.id.mainSignButton, R.string.common_signin_button_text, R.id.inputLayout)
コードは、2つのヘルパー・メソッドとスニペット:
@Test
fun signInUserWithInvalidEmail() {
goToSignIn()
AcceptanceHelper.updateValidationTextView(R.string.ui_data_attribute_email, "[email protected]")
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と登録解除の二つの方法(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と解決しようとします。私のテストのうちの1つだけを実行すると、すべての作品が良好です。しかし、私はすべてのテストを開始すると、私はエラーをキャッチします。 Beacauseテストでは、ダイアログ内のテキストを確認する時間が無かったので、ダイアログを開いただけです。
IdlingResourceクラス:
私のテストで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)
この問題の解決にお役立てください。そして私の英語には申し訳ありません。
'のjava.lang.NullPointerException:nullオブジェクトreference'上の仮想メソッドを呼び出すための試み 'int型android.view.View.getId()' 私はこの' valのような何かを解決するときidlingResource = ViewVisibilityIdlingResource(mActivityTestRule.activity.findViewById(R.id.titleTextView)、2000) ' – Inkognito
あなたが探しているビューはおそらく異なる活動に属し、その後は' mActivityTestRule.activity'です。最新のアクティビティを画面に表示する必要があります。このリンクを参照してください - http://qathread.blogspot.ch/2014/09/discovering-espresso-for-android-how-to.html – denys