自動テストの実行環境 Emulator 実機 Robolectric Robolectric ではない Local Test Instrumentation Test 同じマシン上で実行 Local Testの2つは分けて考える 以降、RobolectricではないLocal Testは Pure Local Testとする
フェイク // UserDataSourceのFake実装 class FakeUserDataSource : UserDataSource { private var user: User = User.emptyUser() override suspend fun getUser(): User { return user } override suspend fun saveUser(user: User) { this.user = user } }
テストデータの生成をまとめる // 保存ボタンが活性化する条件をテストしたい data class UiState( val user: User ) { val isSaveButtonEnable = user.lastName.isNotEmpty() && user.firstName.isNotEmpty() }
テスト対象や依存オブジェクトの生成をまとめる // テスト対象クラス class UserViewModel( val profileRepository: UserRepository, val userConfigRepository : UserConfigRepository, val logTracker : LogTracker, // New )
テスト対象や依存オブジェクトの生成をまとめる // テスト対象クラス class UserViewModel( val profileRepository: UserRepository, val userConfigRepository : UserConfigRepository, val logTracker : LogTracker, // New ) テストケース毎にコンストラクタの指定をして いるとそれぞれ修正する必要があるが、生成を 1つにまとめていれば1箇所修正すればよい