0

我正在尝试以正确的方式设置 Android Espresso 的AccessibilityChecks. 文档建议我只是调用AccessibilityChecks.enable()一个@Before设置方法。问题是,如果您在该类中有多个测试,则第二次测试运行将引发AccessibilityChecks已启用的异常警告。@BeforeClass您可以通过在静态设置方法中调用它来解决此问题。但是,如果您有另一个应该AccessbililtyChecks启用的测试,您将收到相同的错误。AccessibilityChecks.enable()据我所知,创建一个无法禁用或删除的全局视图断言。

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

这样做的问题是,如果我专注于特定的测试集,可访问性检查将不会运行,因为不包括该测试。

也许来自 Android 的人可以在这里进行权衡,但我无法在 Github 或其他地方找到任何工作示例,表明它被用于非平凡的测试套件。

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

4

2 回答 2

3

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

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

或在科特林

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

用于build.gradle

testInstrumentationRunner "com.example.AccessibilityChecksTestRunner"
于 2015-09-03T18:58:16.233 回答
0

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

创建一个TestRule

class AccessibilityChecksTestRule : TestWatcher() {

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

在您的测试课程中:

@RunWith(AndroidJUnit4::class)
class YourInstrumentationTest {

    @get:Rule val accessibilityChecksTestRule = AccessibilityChecksTestRule()

    …
}

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

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
于 2022-02-10T09:02:04.220 回答