我们有一套 Android 仪器测试,我们通过 ./gradlew app:connectedDebugAndroidTest
从 CL 运行。如果测试失败,我们基本上必须等待所有测试都完成,然后才能生成 HTML 报告。我们希望测试在第一次失败的测试时停止。是否有我们可以应用的 gradle 标志来实现这一点?我在官方文档中没有找到任何东西。
最佳答案
我不知道您是否找到了解决方案,但我正在考虑并想出了使用 TestRunner
或 TestRule
.我认为 TestRunner
方法虽然更合适。我不是使用的伴随对象/静态字段的最大粉丝,但它确实有效。我已经使用单个模拟器对其进行了测试,但没有使用跨多个模拟器的 fragment 测试(但我认为它不会在所有模拟器中传播任何故障)。
自定义测试运行器
定制TestRunner
知道测试失败并在第一次测试失败后忽略测试。我创建了 AndroidJUnit4
的精简版这里的功能:https://gist.github.com/AniFichadia/0a0aa665dfc554e963d2ab3276247efb#file-skiponfirstfailuretestrunner-ktAndroidJUnit4
基本上委托(delegate)给 androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner
或 org.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/