Espresso Test 3: Fragment Test
Posted yxhuangCH
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Espresso Test 3: Fragment Test相关的知识,希望对你有一定的参考价值。
Espresso Fragment Test
这是 Espresso 的第二篇,Fragment 的 UI 测试。
它包括两部分内容, 一是测试 fragment 的 UI 测试,另外一部分是 fragment 的跳转测试。
参考代码来源:youtube 视频Fragments in Isolation Espresso Testing (Espresso for Beginners PART 6)
页面是一个电影介绍页 MovieDetailFragment
,包括:
- Directors 导演,点击可以进去详细页面,
DirectorsFragment
- Star Actors 演员,点击可以进去详细页面,
StarActorsFragment
知识点
launchFragmentInContainer
是创建测试fragment 的方法,被创建的 fragment 可以用于交互
launch
也是创建测试 fragment 的方法,但是被创建的 fragment 不可进行交互
官方文档:https://developer.android.com/guide/fragments/test
Fragment Test
测试页面包含, DirectorsFragmentTest
和 StarActorsFragmentTest
如下图所示
MovieDetailFragmentTest
MovieDetailFragmentTest 是测试 MovieDetailFragment, 主要是验证 MovieDetailFragment 的创建展示。
@RunWith(AndroidJUnit4ClassRunner::class)
class MovieDetailFragmentTest
@Test
fun test_isMovieDataVisible()
// SETUP
val movie = THE_RUNDOWN
val fragmentFactory = MovieFragmentFactory()
val bundle = Bundle()
bundle.putInt("movie_id", movie.id)
val scenario = launchFragmentInContainer<MovieDetailFragment>(
fragmentArgs = bundle,
factory = fragmentFactory
)
// VERIFY
onView(withId(R.id.movie_title)).check(matches(withText(movie.title)))
onView(withId(R.id.movie_description)).check(matches(withText(movie.description)))
DirectorsFragmentTest
DirectorsFragmentTest 是测试 DirectorsFragment 主要是验证 DirectorsFragment 的创建展示。
@RunWith(AndroidJUnit4ClassRunner::class)
class DirectorsFragmentTest
@Test
fun test_isDirectorsListVisible()
// GIVEN
val directors = arrayListOf("贾樟柯", "张艺谋")
val fragmentFactory = MovieFragmentFactory()
val bundle = Bundle()
bundle.putStringArrayList("args_directors", directors)
val scenario = launchFragmentInContainer<DirectorsFragment>(
fragmentArgs = bundle,
factory = fragmentFactory
)
// 验证
onView(withId(R.id.directors_text))
.check(matches(withText(DirectorsFragment.stringBuilderForDirectors(directors))))
StarActorsFragmentTest
StarActorsFragmentTest 是测试 StarActorsFragment 主要是验证 StarActorsFragment 的创建展示。
@RunWith(AndroidJUnit4ClassRunner::class)
class StarActorsFragmentTest
@Test
fun test_isActorsListVisible()
// GIVEN
val actors = arrayListOf(
"李雪健",
"吴京",
"郝蕾"
)
val fragmentFragmentFactory = MovieFragmentFactory()
val bundle = Bundle()
bundle.putStringArrayList("args_actors", actors)
val scenario = launchFragmentInContainer<StarActorsFragment>(
fragmentArgs = bundle,
factory = fragmentFragmentFactory
)
// VERIFY
onView(withId(R.id.star_actors_text))
.check(ViewAssertions.matches(withText(StarActorsFragment.stringBuilderForStarActors(actors))))
Fragment 跳转测试
fragment 测试跳转,先创建 MainActivity, 它会默认加载 MovieDetailFragment, 点击,跳转到 DirectorsFragment。
然后点击返回按钮,返回 MovieDetailFragment,
再点击跳转去 StarActorsFragment,然后再点击返回 MovieDetailFragment 这样的一个过程。
@RunWith(AndroidJUnit4ClassRunner::class)
class FragmentNavigationTest
@Test
fun testMovieFragmentsNavigation()
// Setup
val activityScenario = ActivityScenario.launch(MainActivity::class.java)
// NAV DirectorsFragment
onView(withId(R.id.movie_directiors)).perform(click())
// 验证
onView(withId(R.id.fragment_directors_parent)).check(matches(isDisplayed()))
// 返回 MovieDetailFragment
pressBack()
// 验证 MovieDetailFragment 页面
onView(withId(R.id.fragment_movie_detail_parent)).check(matches(isDisplayed()))
// 跳转到 StarActorsFragment
onView(withId(R.id.movie_star_actors)).perform(click())
// 验证 StarActorsFragment
onView(withId(R.id.fragment_star_actors_parent)).check(matches(isDisplayed()))
// 返回 MovieDetailFragment
pressBack()
// 验证 MovieDetailFragment 页面
onView(withId(R.id.fragment_movie_detail_parent)).check(matches(isDisplayed()))
其他
- Scenario.moveToState 可以驱动 fragment 到不同的状态
- Scenario.recreate() 重建 fragment
以上是关于Espresso Test 3: Fragment Test的主要内容,如果未能解决你的问题,请参考以下文章
Android espresso 无法导航到其他 Fragment?
Espresso Test 2: Espresso_simple
Espresso Test 2: Espresso_simple
Android的报错提示:Failed to resolve: com.android.support.test.espresso:espresso-core:3.0.2
Espresso 不使用 Gif 动画运行 Activity 测试
浓缩咖啡:适配器视图的 android.support.test.espresso.AmbiguousViewMatcherException