Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Compose で手に入れた UI の Unit test
Search
mkeeda
March 10, 2023
Programming
3
2.1k
Compose で手に入れた UI の Unit test
Android Test Night #8 で話したスライド
https://testnight.connpass.com/event/274733/
mkeeda
March 10, 2023
Tweet
Share
More Decks by mkeeda
See All by mkeeda
そのAPI、誰のため? Androidライブラリ設計における利用者目線の実践テクニック
mkeeda
2
5.3k
Android StudioのAIコーディングツール、 ぶっちゃけどうなん???
mkeeda
0
240
DataStoreをテストする
mkeeda
0
470
時計仕掛けのCompose
mkeeda
1
420
What's new in Firebase for building gen AI features気になったところ
mkeeda
0
770
手動DIの教訓
mkeeda
0
220
WebViewと向き合う
mkeeda
2
1.4k
お気に入りのAndroid Studio小技集
mkeeda
0
360
Scalable UI testing solutions かんたんまとめ
mkeeda
0
1.2k
Other Decks in Programming
See All in Programming
Go Conference 2025: Goで体感するMultipath TCP ― Go 1.24 時代の MPTCP Listener を理解する
takehaya
9
1.7k
Six and a half ridiculous things to do with Quarkus
hollycummins
0
170
チームの境界をブチ抜いていけ
tokai235
0
170
私はどうやって技術力を上げたのか
yusukebe
43
18k
Flutterで分数(Fraction)を表示する方法
koukimiura
0
130
CSC509 Lecture 04
javiergs
PRO
0
300
After go func(): Goroutines Through a Beginner’s Eye
97vaibhav
0
380
10年もののAPIサーバーにおけるCI/CDの改善の奮闘
mbook
0
820
理論と実務のギャップを超える
eycjur
0
130
Swift Concurrency - 状態監視の罠
objectiveaudio
2
520
Devvox Belgium - Agentic AI Patterns
kdubois
1
120
デミカツ切り抜きで面倒くさいことはPythonにやらせよう
aokswork3
0
230
Featured
See All Featured
A Modern Web Designer's Workflow
chriscoyier
697
190k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.7k
Code Review Best Practice
trishagee
72
19k
Writing Fast Ruby
sferik
629
62k
4 Signs Your Business is Dying
shpigford
185
22k
Making Projects Easy
brettharned
119
6.4k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
19
1.2k
Optimizing for Happiness
mojombo
379
70k
RailsConf 2023
tenderlove
30
1.2k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
Raft: Consensus for Rubyists
vanstee
139
7.1k
The Straight Up "How To Draw Better" Workshop
denniskardys
238
140k
Transcript
Compose UI Unit test 2 02 3 / 03 /
10 Android Test Night # 8 mkeeda
About me • mkeeda (Ҫా Ұฏ) • Twitter: @mr_mkeeda •
Github: @mkeeda • Android Engineer at Cybozu, Inc 2
Android UI 3
Domain Layer UI Layer Data Layer 4 UI elements State
holders UseCases Repositories DataSources ViewModelTest UseCaseTest RepositoryTest DatabaseTest, NetworkTest
End-to-end test 5 Domain Layer UI Layer Data Layer UI
elements State holders UseCases Repositories DataSources Espresso performAction() & assert() 😍 🤮 🤮
6 Domain Layer UI Layer Data Layer UI elements State
holders UseCases Repositories DataSources Unit test : UI ViewModel or Fake 🤮 😍 😍
UI Unit test UI disable 7 Domain Layer UI
Layer Data Layer UI elements State holders UseCases Repositories DataSources
Jetpack Compose UI f(UI state) = UI 8 @Preview @Composable
fun IntTextFieldPreview() { Surface { IntTextField( value = 0, onValueChange = {} ) } }
Compose UI 9 @Test fun `Ҏ֎ೖྗͰ͖ͳ͍`() = 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
10 https://www.youtube.com/watch?v=JyUJZvJ-OV 8
UI Unit test UI UI Screenshot test 11 https://www.droidcon.com/ 20
22 / 08 / 01 /modern-testing-on-android/
Unit test 12
Instrumented test Android CI Android Robolectric Instrumented test Local test
13
My app Android framework Instrumented test (AndroidView) 14 android.view.View MyView
Android Runtime Espresso performAction() & assert()
Android class ⾒ Local test with Robolectric (AndroidView) My app
Robolectric ShadowView MyView Local JVM Espresso performAction() & assert()
Instrumented test (Compose) 16 Compose test library performAction() & assert()
My app Android framework android.graphic.Canvas MyComposable Android Runtime Compose Runtime
Semantic assert Shadow Local test with Robolectric (Compose) 17 Compose
test library performAction() & assert() My app Robolectric ShadowCanvas MyComposable Local JVM Compose Runtime
UI UI Compose UI Compose Robolectric Compose UI 18