私のアプリは、多くのActivity
に対して1つのFragments
で構成されています。
Espressoを使用してFragments
のUIをテストしたいと思います。しかし、私は問題に遭遇しました。
Fragment
のActivity
に追加されていないonCreate
をテストするにはどうすればよいですか。私がFragments
で見たすべての例には、Fragment
に追加されたonCreate
が含まれます。それでは、エスプレッソに特定のFragment
に行き、そこから開始するように指示するにはどうすればよいですか?
ありがとう
ナビゲーションアーキテクチャコンポーネントを使用している場合、テストの開始時に(適切な引数を使用して)ターゲットフラグメントにディープリンクすることにより、各フラグメントを即座にテストできます。
@Rule
@JvmField
var activityRule = ActivityTestRule(MainActivity::class.Java)
protected fun launchFragment(destinationId: Int,
argBundle: Bundle? = null) {
val launchFragmentIntent = buildLaunchFragmentIntent(destinationId, argBundle)
activityRule.launchActivity(launchFragmentIntent)
}
private fun buildLaunchFragmentIntent(destinationId: Int, argBundle: Bundle?): Intent =
NavDeepLinkBuilder(InstrumentationRegistry.getInstrumentation().targetContext)
.setGraph(R.navigation.navigation)
.setComponentName(MainActivity::class.Java)
.setDestination(destinationId)
.setArguments(argBundle)
.createTaskStackBuilder().intents[0]
destinationIdは、ナビゲーショングラフのフラグメントの宛先IDです。フラグメントを起動する準備ができたら実行される呼び出しの例を次に示します。
launchFragment(R.id.target_fragment, targetBundle())
private fun targetBundle(): Bundle? {
val bundle = Bundle()
bundle.putString(ARGUMENT_ID, "Argument needed by fragment")
return bundle
}
また、ここで詳細に回答しました: https://stackoverflow.com/a/55203154/2125351