为多文件测试套件正确启用 AccessibilityChecks

Properly enable AccessibilityChecks for multi-file test suite

我正在努力思考设置 Android Espresso 的 AccessibilityChecks 的正确方法。文档建议我只在 @Before 设置方法中调用 AccessibilityChecks.enable()。问题是,如果您在 class 中有多个测试,第二个测试 运行 将抛出一个异常警告,表明 AccessibilityChecks 已经启用。您可以通过在 @BeforeClass 静态设置方法中调用它来解决此问题。但是,如果您有另一个应该启用 AccessbililtyChecks 的测试,您将得到同样的错误。 AccessibilityChecks.enable() 创建一个 global 视图断言,据我所知无法禁用或删除。

我目前的解决方法是在所有其他测试 (运行 之前进行 Espresso 测试 (AAA_AccessibilityTest.java),并且我不会在其他任何地方启用它。

问题是如果我专注于特定的测试集,辅助功能检查将不会 运行,因为该测试不包括在内。

也许来自 Android 的人可以在这里权衡一下,但我无法在 Github 或其他地方找到任何工作示例,表明它在一个重要的测试套件中使用.

AccessibilityChecks.enable() 的意图很棒,但是在我们 enable() 他们之后,没有办法 disable() 他们的实现似乎完全失败了。我错过了什么吗?我怎样才能以可靠和理智的方式使用它?

您可以在自定义测试运行程序中启用它(在 Java 中):

public class AccessibilityChecksTestRunner extends AndroidJUnitRunner {
  static {
    AccessibilityChecks.enable();
  }
}

或在 Kotlin 中

 class AccessibilityChecksTestRunner : AndroidJUnitRunner() {
    init {
       AccessibilityChecks.enable()
    }
 }

build.gradle中使用:

testInstrumentationRunner "com.example.AccessibilityChecksTestRunner"

这是一个老问题,但如果有人想使用 TestRule 而不是自定义 TestRunner,您可以执行以下操作:

创建 TestRule:

class AccessibilityChecksTestRule : TestWatcher() {

    @BeforeClass
    fun enableAccessibilityChecks() {
        AccessibilityChecks.enable()
    }
}

在你的测试中class:

@RunWith(AndroidJUnit4::class)
class YourInstrumentationTest {

    @get:Rule val accessibilityChecksTestRule = AccessibilityChecksTestRule()

    …
}

最后,在 build.gradle 中,您将使用默认值 androidx TestRunner:

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"