Android Test Night #8 で話したスライド https://testnight.connpass.com/event/274733/
ComposeUI Unit test202 3/03/10Android Test Night #8mkeeda
View Slide
About me• mkeeda (Ҫా Ұฏ)• Twitter: @mr_mkeeda• Github: @mkeeda• Android Engineer at Cybozu, Inc2
Android UI3
Domain LayerUI LayerData Layer4UI elementsState holdersUseCasesRepositoriesDataSourcesViewModelTestUseCaseTestRepositoryTestDatabaseTest, NetworkTest
End-to-end test5Domain LayerUI LayerData LayerUI elementsState holdersUseCasesRepositoriesDataSourcesEspressoperformAction()&assert()😍🤮🤮
6Domain LayerUI LayerData LayerUI elementsState holdersUseCasesRepositoriesDataSourcesUnit test: UI ViewModel or Fake🤮😍😍
UI Unit testUI disable7Domain LayerUI LayerData LayerUI elementsState holdersUseCasesRepositoriesDataSources
Jetpack ComposeUIf(UI state) = UI8@Preview@Composablefun IntTextFieldPreview() {Surface {IntTextField(value = 0,onValueChange = {})}}
Compose UI9@Testfun `Ҏ֎ೖྗͰ͖ͳ͍`() = runComposeUiTest {var userInputText: Int? by mutableStateOf(0)setContent {IntTextField(value = userInputText,onValueChange = { userInputText = it })}val notInt = "sample"onNode(hasSetTextAction()).performTextInput(notInt)onNodeWithText(notInt).assertDoesNotExist()assertThat(userInputText).isEqualTo(0)}ComposeTestRule UI
10https://www.youtube.com/watch?v=JyUJZvJ-OV8
UI Unit testUIUIScreenshot test11https://www.droidcon.com/2022/08/01/modern-testing-on-android/
Unit test12
Instrumented testAndroidCI AndroidRobolectricInstrumented test Local test13
My appAndroid frameworkInstrumented test (AndroidView)14android.view.ViewMyViewAndroid RuntimeEspressoperformAction()&assert()
Android class ⾒Local test with Robolectric (AndroidView)My appRobolectricShadowViewMyViewLocal JVMEspressoperformAction()&assert()
Instrumented test (Compose)16Compose test libraryperformAction()&assert()My appAndroid frameworkandroid.graphic.CanvasMyComposableAndroid RuntimeCompose Runtime
Semantic assert ShadowLocal test with Robolectric (Compose)17Compose test libraryperformAction()&assert()My appRobolectricShadowCanvasMyComposableLocal JVMCompose Runtime
UI UICompose UICompose RobolectricCompose UI 18