我们有一套Android工具测试,可以通过./gradlew app:connectedDebugAndroidTest
从CL运行,如果测试失败,我们基本上必须等待所有测试完成才能生成HTML报告。我们希望测试在第一个失败的测试上停止。我们是否可以使用gradle标志来实现这一目标?我还没有在官方文档中找到任何东西。
答案 0 :(得分:0)
我不知道您是否找到了解决方案,但是我正在考虑它,因此想出了使用TestRunner
或TestRule
的方法。我认为TestRunner
方法更合适。我不是所使用的伴随对象/静态字段的最大支持者,但它确实有效。我已经使用单个仿真器对其进行了测试,但是并未在多个仿真器之间进行分片测试(但我认为它不会在所有仿真器中传播任何故障)。
一个自定义TestRunner
,它知道测试失败,并在第一个测试失败后忽略测试。我使用以下功能创建了AndroidJUnit4
的简化版本:https://gist.github.com/AniFichadia/0a0aa665dfc554e963d2ab3276247efb#file-skiponfirstfailuretestrunner-kt
AndroidJUnit4
本质上委托给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
字段(无论在何处使用)来设置是否启用。
让我知道您的想法。