Android:第一次失败后如何停止仪器测试

标签 android testing android-instrumentation

我们有一套 Android 仪器测试,我们通过 ./gradlew app:connectedDebugAndroidTest 从 CL 运行。如果测试失败,我们基本上必须等待所有测试都完成,然后才能生成 HTML 报告。我们希望测试在第一次失败的测试时停止。是否有我们可以应用的 gradle 标志来实现这一点?我在官方文档中没有找到任何东西。

最佳答案

我不知道您是否找到了解决方案,但我正在考虑并想出了使用 TestRunnerTestRule .我认为 TestRunner方法虽然更合适。我不是使用的伴随对象/静态字段的最大粉丝,但它确实有效。我已经使用单个模拟器对其进行了测试,但没有使用跨多个模拟器的 fragment 测试(但我认为它不会在所有模拟器中传播任何故障)。

自定义测试运行器

定制TestRunner知道测试失败并在第一次测试失败后忽略测试。我创建了 AndroidJUnit4 的精简版这里的功能:https://gist.github.com/AniFichadia/0a0aa665dfc554e963d2ab3276247efb#file-skiponfirstfailuretestrunner-kt
AndroidJUnit4基本上委托(delegate)给 androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunnerorg.robolectric.RobolectricTestRunner .

上面的实现有一个子类 AndroidJUnit4ClassRunner如果任何测试失败,则阻止测试方法运行(通过将它们视为忽略)。如果您需要Robolectric ,然后是自定义 RobolectricTestRunner 的实现与自定义 AndroidJUnit4ClassRunner 相同在要点中,您可以使用与 AndroidJUnit4.loadRunner(Class) 中的内容类似的检查.

要使用它,您只需使用运行器注释您的测试类:@RunWith(SkipOnFirstFailureTestRunner::class) .

只需要注意 AndroidJUnit4内部变化(例如用氮气)。

自定义测试规则

在第一次测试失败后跳过测试的测试规则(将它们视为忽略):
https://gist.github.com/AniFichadia/0a0aa665dfc554e963d2ab3276247efb#file-skiponfirstfailuretestrule-kt

您需要将规则添加到测试类中,这也可以应用于单元测试类。它记录了第一次失败的测试,但我不喜欢这种方法。

启用 TestRunner/TestRule
也许你可以使用 BuildConfig字段以启用它。如果测试在 CICD 上运行,则可以在非生产变体中将其设置为 true。

对于TestRunner您需要设置 enabled类本身的属性。

对于TestRule ,您可以使用 enabled 设置是否启用构造函数中的字段,无论它被使用。

让我知道你的想法。

关于Android:第一次失败后如何停止仪器测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54370550/

相关文章:

android - 为什么 AppCompatActivity 不像 Activity 那样抛出 RuntimeException ("Stub!")?

android - Google Analytics EasyTracker 库的更高级示例(Android 上)

android - Richtext/CK 编辑器在 Android 上不工作

perl - 为什么 Perl 模数中断测试中的 'package' 关键字?

ruby-on-rails - 如何避免 Rspec 共享示例 'previously defined' 警告?

android - 从移动设备访问 Rails 应用程序

c# - 测试公共(public)交通消费者

android - 无法检测文件 : java. lang.NoClassDefFoundError android/content/ComponentCallbacks

android - 在 Android 测试中创建和使用 gradle 或系统属性

android - connectedAndroidTest 如何运行特定测试