如何使用 launchFragmentInHiltContainer 将视图模型传递给片段

How to pass viewmodel to fragment using launchFragmentInHiltContainer

我正在尝试为我的片段编写一个测试用例。片段看起来像这样,

@AndroidEntryPoint
class MainFragment : BaseFragment() {
    val viewModel: HomeFragmentViewModel by viewModels()

......
}

现在在我的测试中 class,

@RunWith(AndroidJUnit4::class)
@LargeTest
@HiltAndroidTest
@ExperimentalCoroutinesApi
class MainFragmentTest {
    @get:Rule
    var hiltRule = HiltAndroidRule(this)

    @Before
    fun init() {
        hiltRule.inject()
    }

    @Test
    fun testFragmentDisplays() {
        val fakeRepository = FakeRepository()
        val scenerio = launchFragmentInHiltContainer<MainFragment>() {
            //(this as MainFragment).viewModel = HomeFragmentViewModel(fakeRepository)
        }
    }
}

问题是片段中的 viewModel 是 val,它必须是 val,因为我正在使用 viewModels() 创建视图模型。无论如何我可以创建视图模型并在我的片段中使用吗?

提前致谢。

像这样制作你的 BaseFragment

abstract class BaseFragment<VM: ViewModel>: Fragment() {

protected lateinit var viewModel: VM

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        viewModel = ViewModelProvider(this).get(getViewModelClass())
.....
    }
}

然后像这样扩展它

@AndroidEntryPoint
class MainFragment : BaseFragment<HomeFragmentViewModel>() {
   
......
}

HomeFragmentViewModel应该是这样的

@HiltViewModel
class HomeFragmentViewModel @Inject constructor(
    private val YourRepository: YourRepository
) : ViewModel() {

........

}