Android检测测试 - 包结构的最佳实践

问题描述 投票:1回答:1

我正在使用浓缩咖啡进行仪器测试。我的生产源代码的结构类似于下图:

enter image description here

我想知道的是androidTest(检测测试包)是否应遵循相同的层次结构?有什么好处?如果我不遵循相同的仪表测试的层次结构,它会导致任何可扩展性问题或一般问题吗?现在我已经创建了instrumentation tests文件夹,它与生产源代码完全不同,一切正常,但我看到开发人员保持包装一致的博客,为什么?并且要清楚,对于单元测试,我会保持它们与匹配包有意义相同,但我不太确定仪器测试。

android android-espresso
1个回答
2
投票

Instrumentation测试是关于测试不同的应用程序组件协同工作以实现某些功能,例如,在提供的应用程序中,登录。由于这是一个高级概述,它将使事情很容易找到某些高级功能的测试,这肯定包含关于该功能的更细粒度的测试,例如在电子邮件字段中输入无效的电子邮件格式等。所以我个人认为这样的仪器测试结构如下:

androidTest
\--- java
     \--- com.example.myapp
          +--- login
          |    +--- LoginTest (Class, Scenario 1 of high level feature, ex: already signed up login)
          |    |    +--- valid_email_login (method)
          |    |    +--- invalid_email_login (method)
          |    |    \--- no_internet_connection (method)
          |    \--- AnotherLoginTest (Class, Scenario 2 of high level feature, ex: create new account login)
          |         \--- test_for_scenario_2 (method)
          \--- another_high_level_feature (and so on...)

这样,在代码更改时,可以轻松地理解和构建测试或更改测试。

使用单元测试,测试是在应用程序的单个(因此所谓的单元)组件上进行的,例如LoginPresenter。通常,测试会模拟组件所需的所有依赖项(可能使用Mockito或其他类型的模拟注入),并验证组件是否按逻辑正常运行。请注意,对于最佳实践,单元测试不需要像Context那样的设备/模拟器或与活动相关的依赖性,因此需要像您的示例MVP中的体系结构才能在本地计算机上执行单元测试(PC或笔记本电脑)。但这并不能阻止您在androidTest文件夹中创建单元测试,特别是在您正在测试需要设备或模拟器进行硬件相关组件测试(如NFC或GPS等)的组件时...

所以在这种情况下,我个人最终会得到这样的结论:

src
+--- androidTest
|     |--- java
|          \--- com.example.myapp
|               +--- unit
|                    \--- (unit\component related tests that need device\emulator go here)
|               \--- instrumentation (components working together related tests go here)
|                    +--- login
|                    |    +--- LoginTest (Class, Scenario 1 of high level feature, ex: already signed up login)
|                    |    |    +--- valid_email_login (method)
|                    |    |    +--- invalid_email_login (method)
|                    |    |    \--- no_internet_connection (method)
|                    |    \--- AnotherLoginTest (Class, Scenario 2 of high level feature, ex: create new account login)
|                    |         \--- test_for_scenario_2 (method)
|                    \--- another_high_level_feature (and so on...)
\--- test
     |--- java
          \--- com.example.myapp (unit\component related tests that don't need device\emulator go under here)
               +--- presenters
               |    +--- LoginPresenterTest
               |    |    +--- view_loading (method)
               |    |    +--- disable_views_when_loading (method)
               |    |    \--- another_unit_test (method)
               |    \--- AnotherPresenterTest
               \--- models (and so on...)

关于您的应用程序所包含的不同变体,Android Gradle Plugin为您提供了一个命令,可以找出放置变体相关测试的位置。只需在您的项目根目录中运行gradlew :app:sourceSets,您就可以获得每个变体(无论是testandroidTest还是none)的目录结构。有关更多信息,请访问此链接:Configure Build Variants。另外,在建立测试时,不要忘记在@Rule结帐JUnit

作为最后的总结,链接到一个很好的Codelab示例来说明上面的大部分内容:Android Testing Codelab

© www.soinside.com 2019 - 2024. All rights reserved.