Android @UiThreadTest注释在片段的编写测试中不起作用
我为显示注释列表的片段编写了一个测试,如下所示Android @UiThreadTest注释在片段的编写测试中不起作用,android,android-fragments,android-espresso,android-testing,Android,Android Fragments,Android Espresso,Android Testing,我为显示注释列表的片段编写了一个测试,如下所示 @RunWith(AndroidJUnit4::class) class CommentListFragmentTest { @Rule @JvmField var instantExecutorRule = InstantTaskExecutorRule() private lateinit var mockedViewModel: CommentListViewModel private val mockNavCont
@RunWith(AndroidJUnit4::class)
class CommentListFragmentTest {
@Rule
@JvmField
var instantExecutorRule = InstantTaskExecutorRule()
private lateinit var mockedViewModel: CommentListViewModel
private val mockNavController = mock<NavController>()
private lateinit var commentListFragment: CommentListFragment
@Before
fun setup() {
mockedViewModel = mock(CommentListViewModel::class.java)
val scenario = launchFragmentInContainer(themeResId = R.style.AppTheme) {
CommentListFragment().apply {
commentListFragment = this
viewModelFactory = ViewModelUtil.createFor(mockedViewModel)
this.viewLifecycleOwnerLiveData.observeForever { viewLifecycleOwner ->
if (viewLifecycleOwner != null) {
// The fragment’s view has just been created
Navigation.setViewNavController(this.requireView(), mockNavController)
}
}
}
}
scenario.onFragment { fragment ->
Navigation.setViewNavController(fragment.requireView(),mockNavController )
}
}
@Test
@UiThreadTest
fun loadCommentsList() {
val commentList: MutableList<Comment> = ArrayList()
commentList.add(mock(Comment::class.java))
commentList.add(mock(Comment::class.java))
commentListFragment.render(CommentListUiModel.SetupList(commentList))
Espresso.onView(withId(R.id.progress_bar))
.check(matches(ViewMatchers.withEffectiveVisibility(ViewMatchers.Visibility.GONE)))
Espresso.onView(withId(R.id.recycler_view))
.check(RecyclerViewItemCountAssertion(2))
Espresso.onView(withId(R.id.emptyCommentList))
.check(matches(ViewMatchers.withEffectiveVisibility(ViewMatchers.Visibility.GONE)))
}
}
但当我使用下面的方法时,它会起作用:
@Rule
@JvmField
var uiThreadTestRule = UiThreadTestRule()
@Test
fun loadCommentsList() {
uiThreadTestRule.runOnUiThread {
val commentList: MutableList<Comment> = ArrayList()
commentList.add(mock(Comment::class.java))
commentList.add(mock(Comment::class.java))
commentListFragment.render(CommentListUiModel.SetupList(commentList))
}
Espresso.onView(withId(R.id.progress_bar))
.check(matches(ViewMatchers.withEffectiveVisibility(ViewMatchers.Visibility.GONE)))
Espresso.onView(withId(R.id.recycler_view))
.check(RecyclerViewItemCountAssertion(2))
Espresso.onView(withId(R.id.emptyCommentList))
.check(matches(ViewMatchers.withEffectiveVisibility(ViewMatchers.Visibility.GONE)))
}
@规则
@JvmField
var uiThreadTestRule=uiThreadTestRule()
@试验
趣味加载注释列表(){
uiThreadTestRule.runUnuithread{
val commentList:MutableList=ArrayList()
add(mock(Comment::class.java))
add(mock(Comment::class.java))
render(CommentListUiModel.SetupList(commentList))
}
浓缩咖啡onView(带id(R.id.progress_bar))
.检查(匹配(ViewMatchers.withEffectiveVisibility(ViewMatchers.Visibility.GONE)))
浓缩咖啡onView(带id(R.id.recycler_view))
.检查(RecycleServiceItemCountAssertion(2))
浓缩咖啡onView(带id(R.id.emptyCommentList))
.检查(匹配(ViewMatchers.withEffectiveVisibility(ViewMatchers.Visibility.GONE)))
}
我想用@UiThreadTest注释替换runOnUiThread,因为UiThreadTestRule已弃用,似乎@UiThreadTest不起作用,有什么问题?我做错什么了吗
@Rule
@JvmField
var uiThreadTestRule = UiThreadTestRule()
@Test
fun loadCommentsList() {
uiThreadTestRule.runOnUiThread {
val commentList: MutableList<Comment> = ArrayList()
commentList.add(mock(Comment::class.java))
commentList.add(mock(Comment::class.java))
commentListFragment.render(CommentListUiModel.SetupList(commentList))
}
Espresso.onView(withId(R.id.progress_bar))
.check(matches(ViewMatchers.withEffectiveVisibility(ViewMatchers.Visibility.GONE)))
Espresso.onView(withId(R.id.recycler_view))
.check(RecyclerViewItemCountAssertion(2))
Espresso.onView(withId(R.id.emptyCommentList))
.check(matches(ViewMatchers.withEffectiveVisibility(ViewMatchers.Visibility.GONE)))
}