【发布时间】:2017-12-27 08:04:58
【问题描述】:
我正在尝试设置类似于 GithubBrowserSample 的 UI 测试,看起来示例项目只有模拟 ViewModel 用于 Fragment,但没有模拟 Activity。
这是我试图通过模拟ViewModel 来测试Activity 的代码。但是ViewModel 没有在活动中的onCreate() 之前设置。
@RunWith(AndroidJUnit4::class)
class MainActivityTest {
val viewModel = mock(MainViewModel::class.java)
@Rule
@JvmField
val activityRule = ActivityTestRule<MainActivity>(MainActivity::class.java, true, true)
private val liveData = MutableLiveData<Resource<Object>>()
@Before
open fun setUp() {
activityRule.activity.viewModelFactory = createViewModelFor(viewModel)
`when`(viewModel.liveData).thenReturn(liveData)
viewModel.liveData?.observeForever(mock(Observer::class.java) as Observer<Resource<Object>>)
liveData.postValue(Resource.success(Object()))
}
fun <T : ViewModel> createViewModelFor(model: T): ViewModelProvider.Factory =
object : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
if (modelClass.isAssignableFrom(model.javaClass)) {
return model as T
}
throw IllegalArgumentException("unexpected model class " + modelClass)
}
}
}
有人可以帮我解决这个问题吗?
【问题讨论】:
-
你也可以分享一些活动课的内容吗?
标签: android kotlin android-espresso android-architecture-components android-viewmodel