我正試圖為我的片段寫一個測驗案例。這個片段看起來是這樣的,
我想為我的片段寫一個測驗案例。
@AndroidEntryPoint
class MainFragment : BaseFragment(){
val viewModel: HomeFragmentViewModel by viewModels()
......
}
現在在我的測驗類中,
@RunWith(AndroidJUnit4::class)
@LargeTest
@HiltAndroidTest
@ExperimentalCoroutinesApi[/span
class MainFragmentTest{
@get:Rule
var hiltRule = HiltAndroidRule(this)
@Before[/span
fun init() {
hiltRule.injection()
}
@Test
fun testFragmentDisplays() {
val fakeRepository = FakeRepository()
val scenerio = launchFragmentInHiltContainer<MainFragment> () {
//(this as MainFragment).viewModel = HomeFragmentViewModel(fakeRepository)。
}
}
}
問題是Fragment中的viewModel是val,它必須是val,因為我正在使用viewModels()來創建viewmodel。有什么辦法可以讓我創建viewmodel并在我的片段中使用嗎?
提前感謝。
。uj5u.com熱心網友回復:
使你的BaseFragment像這樣
abstract class BaseFragment<VM。ViewModel>。Fragment() {
protected lateinit var viewModel: 轉換器
override fun onCreate(servedInstanceState: Bundle? ){
super.onCreate(s savedInstanceState)
viewModel = ViewModelProvider(this).get(getViewModelClass()
.....
}
}
然后像這樣擴展它
class MainFragment : BaseFragment<HomeFragmentViewModel> /span>(){
......
}
而HomeFragmentViewModel應該是這樣的
@HiltViewModel
class HomeFragmentViewModel @Inject constructor(
private val YourRepository: YourRepository
) : ViewModel() {
........
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/318390.html
標籤:
