テストできるように、ViewModel をテストに挿入する方法をかなり探していました。ビューモデルに、いくつかのビジネス ロジック インタラクターを含むコンストラクター インジェクションがあるとします。フラグメントに簡単に挿入できますが、テストでは成功しません。
@HiltAndroidTest
class ViewModelTest
val randomViewmodel: RandomViewmodel// now what ? since by viewModels() is not accessible in tests
@Test
fun viewModelTet() {
randomViewmodel.triggerAction()
assertEquals(RandomVIewState(1), randomViewmodel.getState())
}
テストクラスに byViewModels() を実装しようとしましたが、コンストラクター引数なしでビューモデルを注入できましたが、成功しませんでした。
class RandomViewmodel @ViewModelInject constructor(
private val randomInteractor: RandomInteractor
) : ViewModel
Caused by: java.lang.InstantiationException: class app.RandomViewModel has no zero argument constructor
理由: viewModel がインタラクターなどの依存関係を処理するため、画面ロジックを完全にテストできるようにしたいと考えています。さまざまなデータが流れている背後にかなりの数のロジックが存在する可能性があります。フラグメントのテストはおそらく可能ですが、多くのテストを伴う大規模なプロジェクトでは遅くなります。
私はすでにhttps://developer.android.com/jetpack/guide#test-componentsを読んでいます.画面全体のロジック