news 2026/8/3 19:36:26

KataSuperHeroesAndroid测试案例详解:MainActivity篇

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
KataSuperHeroesAndroid测试案例详解:MainActivity篇

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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/3 19:34:52

Windows窗口置顶神器:AlwaysOnTop让你的多任务效率提升300%

Windows窗口置顶神器&#xff1a;AlwaysOnTop让你的多任务效率提升300% 【免费下载链接】AlwaysOnTop Make a Windows application always run on top 项目地址: https://gitcode.com/gh_mirrors/al/AlwaysOnTop 在Windows系统中高效工作&#xff0c;你是否经常被窗口切…

作者头像 李华
网站建设 2026/8/3 19:24:26

从Unix Pipe到Go Channel:深入解析管道模式在并发与系统设计中的应用

1. 从“管道”到“管道”&#xff1a;一个后端工程师的PIPE学习心路 最近在梳理一个老项目的日志处理模块时&#xff0c;遇到了一个典型的性能瓶颈&#xff1a;主业务线程需要将大量实时生成的日志条目&#xff0c;异步地、可靠地写入到远端的日志分析服务。最初的实现简单粗暴…

作者头像 李华
网站建设 2026/8/3 19:15:19

为什么个人 Demo 跑通后,团队接手反而更慢?——Agentic AI 的权限与…

这篇不先堆名词。我们把《Agentic AI 真能提效吗&#xff1f;先看流程里最慢的那一步》拆成几级台阶&#xff0c;看完至少知道下一步该学什么、该练什么。 摘要 上周把 Claude Code 接入团队代码库&#xff0c;Demo 跑得挺顺&#xff0c;结果生产环境直接翻车。不是模型不行&…

作者头像 李华
网站建设 2026/8/3 19:12:11

微信小程序开发教程 043 - 在小程序开发中使用 npm

本文介绍了如何在微信小程序开发中使用 npm 中包的功能&#xff0c;大大提高微信小程序的开发效率&#xff0c;同时也是微信小程序系列教程的视频版更新。 微信小程序在发布之初没有对 npm 的支持功能&#xff0c;这也是目前很多前端开发人员在熟悉了 npm 生态环境后&#xff…

作者头像 李华
网站建设 2026/8/3 19:10:24

MVC3缓存之三:MVC3中的局部缓存(Partial Page)

在之前的文章MVC3缓存之二&#xff1a;页面缓存中的局部动态中&#xff0c;没有注意到MVC3的版本中对输出缓存进行了修改&#xff0c;园友的评论中提及了此问题&#xff0c;所以又去抽时间看了下局部缓存的解决方案。 最后发现在发布的MVC3版本中&#xff0c;新增了一个叫做Par…

作者头像 李华