Open1
ナビゲーションテスト

依存関係追加
ナビゲーションに必要な依存関係を追加していきます。
日々反省なのですが、nabGraphの依存関係を追加するときに
ついでに設定すべきですね。。。
build.gradle.kts(Module:app)
testingがエラーになるけど一旦気にしない。
dependencies {
androidTestImplementation(libs.androidx.navigation.testing)
libs.versions.toml
バージョンとライブラリを設定。
[versions]
navigationTesting = "2.9.0"
[libraries]
androidx-navigation-testing = { module = "androidx.navigation:navigation-testing", version.ref = "navigationTesting" }
テストファイル作成
テストを作る場所はandroidTestの中です。
今回はNavTest.ktというファイル名にしてみました。
テストのセットアップ
ルール作成
ナビゲーションのテストは、Jetpack ComposeのUIテストです。
最初に、Jetpack ComposeのUIテストを行うためのRuleを作成すること。
作成するための関数がcreateAndroidComposeRule()
テストで、Compose UIにアクセスさせてくれるためのもの。
class NavTest {
@get:Rule
val composeTestRule = createAndroidComposeRule<ComponentActivity>()
}
TestNavControllerの設定
ここから先は、特に指定がない限り、NavTestクラスの中で記述していきます。
navControllerを変数を用意して、setupの中で値を設定。
テストルールのコンテンツを設定。
コンテンツは今回テストするナビゲーショングラフ。
private lateinit var navController: TestNavHostController
@Before
fun setup() {
navController = TestNavHostController(composeTestRule.activity)
navController.navigatorProvider.addNavigator(ComposeNavigator())
composeTestRule.setContent {
NoToreNavGraph(
navController = navController,
onDrillStart = {},
onDrillEnd = {}
)
}
}
テストする!
最初に表示される画面のテストと、ボタンをクリックしたときに遷移する画面のテストを実施。
各画面のModifierにtestTagを仕込んでおき、onNodeWithTagで呼び出す。
assertIsDisplayed()で表示されたかどうかの評価をする。
@Test
fun 最初の画面はHomeScreen() {
composeTestRule.onNodeWithTag("HomeScreen").assertIsDisplayed()
}
@Test
fun 計算どりるボタンをクリックしたらDrillSelectScreenに遷移() {
composeTestRule.onNodeWithTag("DrillSelectButton").performClick()
composeTestRule.onNodeWithTag("DrillSelectScreen").assertIsDisplayed()
}
@Test
fun DrillSelectScreenから戻るボタンを押すとHomeScreenに遷移() {
composeTestRule.onNodeWithTag("DrillSelectButton").performClick()
composeTestRule.activityRule.scenario.onActivity {
navController.popBackStack()
}
composeTestRule.onNodeWithTag("HomeScreen").assertIsDisplayed()
}
ナビゲーションテストは簡単でいいなぁ😄