Closed1
アンドロイドテストでViewModelを扱うとき

mockkを利用する目的
Geminiが教えてくれました。
Mockk を使う目的は、PromptViewModel のように直接インスタンス化すると
テストが複雑になるコンポーネントを、テストしやすいように振る舞いを「模擬」すること
なんか難しいこと書いてあるけど、mockkを使うと簡単にテストコードが書けます!
ということかなと思いました まる
すごく詳しく知りたい場合は、以下を参考にしよう!!!
依存関係導入
いつもの流れですが、依存関係を先に設定します。
libs.versions.toml
[versions]
mockkAndroid = "1.13.11"
mockk = "1.13.11"
[libraries]
mockk-android = { module = "io.mockk:mockk-android", version.ref = "mockkAndroid" }
mockk-mockk = { module = "io.mockk:mockk", version.ref = "mockk" }
build.gradle.kts
dependencies {
//mockk
testImplementation(libs.mockk.mockk)
androidTestImplementation(libs.mockk.android) // Androidテスト用
→Sync Now!!!!
mockkでテストを作成
ルール作成と変数の宣言をする
class CanvasSecTest {
@get:Rule
val composeTestRule = createAndroidComposeRule<ComponentActivity>()
//後でこのviewModelをmockkを使ってモック化
private lateinit var viewModel: PromptViewModel
private lateinit var uiStateFlow: MutableStateFlow<PromptUiState>
Beforeを設定
テストをsetupしていきます。重要・・・。
①uiStateFlowにviewModelの初期化状態を設定
②MockKを使ってviewModelのモックを作成
③viewModelのuiStateプロパティをモック化したuiStateFlowに設定
//viewModelのupdateUiStateメソッドをモック化
val slot = slot<(PromptUiState) -> PromptUiState>()
every { mockViewModel.updateUiState(capture(slot)) } answers {
uiStateFlow.value = slot.captured(uiStateFlow.value)
Runs
}
このスクラップは3ヶ月前にクローズされました