【问题标题】:I am confused when to use instrumentation test and when to use unit test我很困惑何时使用仪器测试以及何时使用单元测试
【发布时间】:2020-08-10 02:07:38
【问题描述】:

现在有了 AndroidX 测试框架,我们可以使用 Robolectric 后端将 Espresso 测试作为单元测试运行。但是我很困惑何时使用仪器测试以及何时使用单元测试。

假设我们有两个屏幕,MovieListActivityMovieDetailActivity。当我单击 MovieListActivity 中的某个项目时,该电影的详细信息将显示在 MovieDetailActivity 中。

现在在这种情况下,可能的单元测试是什么?可能的仪器测试是什么?

例如,我可以编写仪器测试

  • 检查电影是否在列表中
  • 点击影片进入详细画面
  • 详细信息屏幕正确显示详细信息。

但现在,这些测试也可以作为单元测试运行(因为我们使用的是 Android X 测试框架)而且速度更快,因为我们不在设备/模拟器中运行测试。那么是什么使测试符合仪器测试的条件?

如果我想同时运行单元测试和仪器测试怎么办?

由于我们使用的是 Android X 测试框架,因此可以通过将文件复制到 androidTest 文件夹来将相同的单元测试文件作为仪器测试运行。这会造成重复文件,并使测试用例维护变得困难。 (例如,如果我在单元test 文件夹中进行编辑,则应在androidTest 文件中进行相同的修改。)

  • 有什么方法可以将测试标记为同时作为仪器测试和单元测试运行?
  • 如果这是一种不好的做法,最佳做法是什么,其他最佳做法应该是什么 使用 Android X 测试框架时是否考虑过?

【问题讨论】:

  • 简单的答案:当你不需要使用 Android API 时,你会使用单元测试,但是当你需要使用 Android API 时,比如操作活动、小部件、TextViewEditText.. 你必须在androidTest 包下使用仪器测试
  • @Zain 简单明了的回答!
  • @Zain 是的,这是有道理的,但我要问的是,当涉及到AndroidX Test FrameworkRobolectric 时,应该在什么基础上选择测试类型?

标签: android unit-testing testing robolectric androidx-test


【解决方案1】:

我使用我使用的基本策略Android X Test | Robolectric 来编写需要context 的单元测试,就像所有新的jetpack 组件都与我们需要使用它们的上下文的框架紧密耦合,所以Robolectric会很好用,不需要androidTest Instrumentation,但如果我正在使用需要我检查视图的set 功能并通过一些花哨的动画或自定义的东西在我的用户界面上可见的视图,我会使用 espresso Instrumentation。

我不会详细介绍,但我会创建一个支持博客来解释,但 Hackish Cheatsheet of Test and Framework IMO 会是

Remote DataSource Testing [Retrofit] - Mockserver | Fakes | Mocks
Local DataSource database [Room] - Android X Test | Robolectric 
Local DataSource Prefs [SharedPrefernces] - Android X Test | Robolectric 
Local DataSource Store [DataSource] - Android X Test | Robolectric 
Repository Layer | UseCases | business-logic  - JUnit 4/5 | Fakes | Mocks
ViewModel & LiveData - Android X Test | Robolectric 
Navigation [Navhost|Intents] - Android X Test | Robolectric 
View & Animations [Activity|Fragments|CustomViews] - Espresso|Barista Instrumentation
Notifications Test - Instrumentation and ADB
Broadcast Test - Instrumentation and ADB
Content provider - Instrumentation and ADB
Firebase Testing(depends on things you are testing) - Espresso|Barista Instrumentation | Android X Test | Robolectric | ADB

如果您有单独的经验,请告诉我。

【讨论】:

  • 备忘单很有帮助
猜你喜欢
  • 2012-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-17
  • 1970-01-01
  • 2018-06-24
  • 2021-12-06
  • 1970-01-01
相关资源
最近更新 更多