0

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

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

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

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

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

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

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

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

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

1 回答 1

2

我使用我使用的基本策略Android X Test | Robolectric来编写需要的单元测试context,就像所有新的喷气背包组件都与我们需要上下文来处理它们的框架紧密耦合,所以效果Robolectric很好,不需要androidTest Instrumentation但如果我使用需要我检查set视图功能并通过一些花哨的动画或自定义的东西使其在我的 ui 上可见的视图,我使用 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

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

于 2020-11-29T10:57:39.790 回答