KataSuperHeroesAndroid测试案例详解:MainActivity篇
【免费下载链接】KataSuperHeroesAndroidSuper Heroes Kata for Android Developers. The main goal is to practice UI Testing.项目地址: https://gitcode.com/gh_mirrors/ka/KataSuperHeroesAndroid
KataSuperHeroesAndroid是一个专为Android开发者设计的超级英雄测试练习项目,主要目标是帮助开发者掌握UI测试技能。本文将详细解析MainActivity的测试案例,带你了解如何为Android应用构建可靠的UI测试。
MainActivity测试概览
MainActivity作为应用的主界面,负责展示超级英雄列表并处理用户交互。其测试文件位于app/src/androidTest/java/com/karumi/katasuperheroes/MainActivityTest.java,包含了8个核心测试用例,覆盖了从空状态显示到列表项点击的完整交互流程。
图1:KataSuperHeroes应用的MainActivity界面,展示超级英雄列表
测试环境配置
测试类使用了DaggerMockRule和IntentsTestRule进行依赖注入和Activity管理:
- DaggerMockRule:用于模拟依赖组件,隔离测试环境
- IntentsTestRule:管理MainActivity的生命周期,支持Intent验证
关键依赖声明如下:
@Rule public DaggerMockRule<MainComponent> daggerRule = new DaggerMockRule<>(MainComponent.class, new MainModule()); @Rule public IntentsTestRule<MainActivity> activityRule = new IntentsTestRule<>(MainActivity.class, true, false); @Mock SuperHeroesRepository repository;核心测试场景解析
1. 空状态显示测试
当没有超级英雄数据时,应用应显示空状态提示:
@Test public void showsEmptyCaseIfThereAreNoSuperHeroes() { givenThereAreNoSuperHeroes(); startActivity(); onView(withText("¯\\_(ツ)_/¯")).check(matches(isDisplayed())); }此测试验证了在SuperHeroesRepository返回空列表时,空状态文本是否正确显示。
2. 超级英雄列表展示测试
验证列表是否正确显示超级英雄名称:
@Test public void showsSuperHeroesNameIfThereAreSuperHeroes() { List<SuperHero> superHeroes = givenThereAreSomeSuperHeroes(ANY_NUMBER_OF_SUPER_HEROES); startActivity(); RecyclerViewInteraction.<SuperHero>onRecyclerView(withId(R.id.recycler_view)) .withItems(superHeroes) .check(new RecyclerViewInteraction.ItemViewAssertion<SuperHero>() { @Override public void check(SuperHero superHero, View view, NoMatchingViewException e) { matches(hasDescendant(withText(superHero.getName()))).check(view, e); } }); }该测试使用自定义的RecyclerViewInteraction工具类,验证列表项是否包含正确的超级英雄名称。
3. 复仇者联盟徽章显示测试
验证属于复仇者联盟的超级英雄是否显示特殊徽章:
@Test public void showsAvengersBadgeIfASuperHeroIsPartOfTheAvengersTeam() { List<SuperHero> superHeroes = givenThereAreSomeAvengers(ANY_NUMBER_OF_SUPER_HEROES); startActivity(); RecyclerViewInteraction.<SuperHero>onRecyclerView(withId(R.id.recycler_view)) .withItems(superHeroes) .check(new RecyclerViewInteraction.ItemViewAssertion<SuperHero>() { @Override public void check(SuperHero superHero, View view, NoMatchingViewException e) { matches(hasDescendant(allOf(withId(R.id.iv_avengers_badge), withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE)))).check(view, e); } }); }对应的,非复仇者联盟成员不应显示徽章,这通过另一个测试用例doesNotShowAvengersBadgeIfASuperHeroIsNotPartOfTheAvengersTeam进行验证。
4. 列表项点击交互测试
验证点击列表项是否正确跳转到详情页:
@Test public void opensSuperHeroDetailActivityOnRecyclerViewItemTapped() { List<SuperHero> superHeroes = givenThereAreSomeSuperHeroes(); int superHeroIndex = 0; startActivity(); onView(withId(R.id.recycler_view)). perform(RecyclerViewActions.actionOnItemAtPosition(superHeroIndex, click())); SuperHero superHeroSelected = superHeroes.get(superHeroIndex); intended(hasComponent(SuperHeroDetailActivity.class.getCanonicalName())); intended(hasExtra("super_hero_name_key", superHeroSelected.getName())); }图2:点击列表项后打开的超级英雄详情页
5. 加载状态和列表数量测试
- 加载完成后隐藏进度条:
doesNotShowLoadingViewOnceSuperHeroesAreShown测试验证加载完成后进度条是否隐藏 - 列表数量验证:
showsTheExactNumberOfSuperHeroes测试确保列表项数量与数据源一致
测试辅助方法
测试类中定义了多个辅助方法简化测试 setup:
givenThereAreSomeSuperHeroes():创建指定数量的测试超级英雄数据givenThereAreNoSuperHeroes():模拟空数据场景startActivity():启动测试Activity
这些方法使用Mockito框架模拟SuperHeroesRepository的返回数据,实现测试隔离。
如何运行测试
要运行这些测试,首先克隆项目:
git clone https://gitcode.com/gh_mirrors/ka/KataSuperHeroesAndroid然后使用Android Studio或命令行运行Instrumented Tests:
./gradlew connectedAndroidTest总结
MainActivity的测试案例展示了Android UI测试的最佳实践,包括:
- 使用Espresso进行UI交互和断言
- 通过DaggerMock隔离依赖组件
- 覆盖空状态、加载状态、正常显示等多场景
- 验证列表展示、交互跳转等核心功能
通过这些测试,可以确保MainActivity在各种场景下都能正确工作,提高应用的质量和可靠性。
图3:应用完整操作流程动画
【免费下载链接】KataSuperHeroesAndroidSuper Heroes Kata for Android Developers. The main goal is to practice UI Testing.项目地址: https://gitcode.com/gh_mirrors/ka/KataSuperHeroesAndroid
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考