如何创建本地测试用Result类?ViewModel测试模拟Result返回方法
解决RemoteConfigNetworkRepository测试中Result返回无效的问题
问题根源
你当前测试代码里直接通过构造函数创建Result实例的写法是错误的:Kotlin标准库的Result是inline类,不允许直接调用构造函数实例化,必须使用官方提供的Result.success()或Result.failure()工厂方法。另外,目标方法返回的是Result<RemoteConfig?>,测试中要保证类型匹配。
修正后的测试代码
@Test fun fetchRemoteConfig_saveRemoteConfig() = runTest { val fakeRemoteConfig = RemoteConfig( 0, 0, "", 0, ) // 使用Result.success()工厂方法创建成功结果,类型匹配Result<RemoteConfig?> coEvery { remoteRepo.fetchRemoteConfig(true) } returns Result.success(fakeRemoteConfig) viewModel.fetchRemoteConfig(true) // 可添加验证逻辑,比如检查ViewModel的状态变化 // 示例:assertEquals(fakeRemoteConfig, viewModel.remoteConfigState.value) }
额外注意事项
- 确保
remoteRepo是通过MockK创建的Mock实例,比如:val remoteRepo = mockk<RemoteConfigNetworkRepository>() - 确认ViewModel已经正确注入了这个Mock实例,而非真实的Repository对象
- 如果需要模拟失败场景,使用
Result.failure():coEvery { remoteRepo.fetchRemoteConfig(true) } returns Result.failure(Exception("test error"))
内容的提问来源于stack exchange,提问作者c-an
相关产品推荐
相关产品推荐

