适当地为多文件测试套件启用AccessibilityChecks



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

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

问题是,如果我专注于一个特定的测试集,无障碍检查将不会运行,因为该测试不包括在内。

也许有人从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()
    }
}

在你的测试类中:

@RunWith(AndroidJUnit4::class)
class YourInstrumentationTest {
    @get:Rule val accessibilityChecksTestRule = AccessibilityChecksTestRule()
    …
}
最后,在build.gradle中,您将使用默认的androidx TestRunner:
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

相关内容

  • 没有找到相关文章

最新更新