当前位置: 首页 > news >正文

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

http://www.cnnetsun.cn/news/3818982.html

相关文章:

  • Windows窗口置顶神器:AlwaysOnTop让你的多任务效率提升300%
  • 从Unix Pipe到Go Channel:深入解析管道模式在并发与系统设计中的应用
  • AiTM 中间人钓鱼成为律所首要初始访问威胁的机理、行业诱因与分层防御体系研究
  • 为什么个人 Demo 跑通后,团队接手反而更慢?——Agentic AI 的权限与…
  • 微信小程序开发教程 043 - 在小程序开发中使用 npm
  • MVC3缓存之三:MVC3中的局部缓存(Partial Page)
  • 获取使用ClickOnce部署的应用程序的版本号
  • VSCode 必装的 10 个高效开发插件
  • Visual C++ MFC序列化实战:从原理到绘图应用开发
  • 华为OD机试免单统计题解:哈希表应用与多语言实现详解
  • Webpack 2 视频教程 012 - 理解Webpack 中的 CSS 作用域与 CSS Modules
  • 【C++】面向对象三大特性之多态的详细解析(一)
  • 奥维昔巴特Odevixibat获FDA批准:进行性家族性肝内胆汁淤积症和Alagille综合征胆汁淤积性瘙痒的非全身性治疗
  • 从零到月入2W+:一位程序员用AI做知识付费的完整闭环(含选题库、SOP模板、转化漏斗)
  • 如何免费解锁Wand专业版功能:3种补丁方案与远程控制完整指南
  • 《React Native 精解与实战》书籍连载「React 与 React Native 简介」
  • Path of Building:5分钟学会《流放之路》离线构筑,告别浪费资源的试错
  • Unity URP自定义渲染管线:RenderFeature与Volume协同实现动态特效
  • Docker 入门与完整实战视频教程
  • Unity UGUI自适应布局避坑指南:Content Size Fitter嵌套问题解析与实战解决方案
  • 别再手动盘库存了!电商库存预警系统3步搭建指南(附真实案例)
  • 相关系数全解析:从皮尔逊到斯皮尔曼,量化变量关联的实战指南
  • HarmonyOS应用实战-启示散页-72-多窗口编辑别互相覆盖草稿:给每个窗口分配 draftSessionId
  • 收藏!小白程序员也能掌握大模型,高薪就业机会等你来!
  • 大模型高效部署实战:从Inkling-Small看参数减半性能持平的实现与落地
  • 国产长芯微LDMX345完全pin-pin替代ADXL345,是一款小而薄的低功耗三轴加速度计
  • WebPShop:让Photoshop完美支持WebP格式的终极解决方案
  • Shader Weaver图形化着色器编辑:降低Unity视觉开发门槛
  • 构建文本解析与状态机引擎:从复杂字符串到结构化业务逻辑
  • jQuery低版本高危漏洞CVE-2020-11022/11023深度解析与修复指南