我正试图把我的头围绕正确的方式设置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"