我目前正在为一个片段编写一些UI单元测试,其中一个 @Test
是为了检查对象列表是否正确显示,这不是一个集成测试,因此我希望可以使用 mock 来进行 ViewModel
的模拟。
该片段的变量:
class FavoritesFragment : Fragment() {
private lateinit var adapter: FavoritesAdapter
private lateinit var viewModel: FavoritesViewModel
@Inject lateinit var viewModelFactory: FavoritesViewModelFactory
(...)
以下是代码:
@MediumTest
@RunWith(AndroidJUnit4::class)
class FavoritesFragmentTest {
@Rule @JvmField val activityRule = ActivityTestRule(TestFragmentActivity::class.java, true, true)
@Rule @JvmField val instantTaskExecutorRule = InstantTaskExecutorRule()
private val results = MutableLiveData<Resource<List<FavoriteView>>>()
private val viewModel = mock(FavoritesViewModel::class.java)
private lateinit var favoritesFragment: FavoritesFragment
@Before
fun setup() {
favoritesFragment = FavoritesFragment.newInstance()
activityRule.activity.addFragment(favoritesFragment)
`when`(viewModel.getFavourites()).thenReturn(results)
}
(...)
// This is the initial part of the test where I intend to push to the view
@Test
fun whenDataComesInItIsCorrectlyDisplayedOnTheList() {
val resultsList = TestFactoryFavoriteView.generateFavoriteViewList()
results.postValue(Resource.success(resultsList))
(...)
}
我可以模拟ViewModel
,但当然,那不是在Fragment
内创建的同一个ViewModel
。
所以我的问题真正在于,是否有人成功地完成了这个操作或者有一些可以帮助我的指针/参考资料?
此外,我尝试查看google-samples,但没有找到合适的内容。
供参考,项目可以在此处找到:https://github.com/JoaquimLey/transport-eta/