2017-12-05 23 views

答えて

1

短い答え:

いいえ、それは、バージョン3.0.1のような外部の構成によって制御IdlingPolicies.dynamicIdlingResourceWarningPolicyないに焼いています。このポリシーは、ハンドラに送信される警告イベントの頻度を制御します。これらのイベントは、順番に、isIdleNow()

少し長い答えに呼び出しを引き起こす:

それは非常に良い理由でこのようなものです。 isIdleNow()は、アプリケーションの状態を設定する場所ではありません。 isIdleNow()と呼ばれる時点では、すでに知られているはずです。状態は、一般的にResourceCallback::onTransitionToIdleへの呼び出しと(時間の99%)、それはあなたがすぐに返すことを言うときisIdleNow()

の内側にドキュメントがそれを示唆していないが、それを明確にしないで更新する必要があります。

isIdleNow()で状態を更新すると、スレッドを条件付きでスリープ状態にすることにはなりません。実際には、あなたのテストがテストごとに5秒遅くなるため、さらに悪化します。それはエスプレッソの目的を破り、テストの決定論を殺します。そして、私の考えでは、エスプレッソテストの決定論は、組み込みのメインスレッドの同期とアイドリングのリソースインタフェースのおかげですばらしいものになっています。

これで、このタイムアウトを変更する必要はないはずです。 ResourceCallback::onTransitionToIdleを呼び出すと、このイベントがハンドラにポストされ、エスプレッソがすぐに処理されます。

残念ながら、非効率的な実装を促進する多くの例やブログさえあります。エスプレッソ-contribので

okhttp idling resource

DrawerActions$IdlingDrawerListenerを同梱:あなたはより多くの従来のアイドリングリソースをしたい場合

これらの例は、インスピレーションの大きな源である必要があります。 here is the source

CountingTaskExecutorRuleルームライブラリからは、usageがあります。

+0

すばやく詳細な応答に感謝します。私はそれを読もうと私は後に応答します。再度、感謝します! – oaskamay

+0

こんにちは!はい、そうです。この動作はEspressoでハードコードされています。変更する唯一の方法は、ソースを変更してjarファイルを再コンパイルすることです。テストを続行する前に、可視性(または任意の他の 'View'状態)をチェックするために、ある程度の間隔で' ViewAssertion'を実行しました。これは本当にうまくいっていますが、まだエスプレッソはまだアイドル状態ではないバックグラウンドタスクのために 'ViewAssertion'をチェックするまでに時間がかかりすぎることがあります(チームはプロダクションコードをテストコードから無料で保とうとしているので、 .. 私は当然知っている!?)。 – oaskamay