我们已经遇到了Espresso测试中的问题,并且非常确定的原因是一个新的问题。LiveData#postValue
调用。似乎Espresso有时会在所有的任务被执行之前就在 ArchTaskExecutor
比如说。
在我看来,这个问题应该可以通过使用 IdlingResource
:我们可以换掉 ArchTaskExecutor
对于一个我们与 CountingIdlingResource
以确保Espresso知道正在执行的任务。然而,似乎不可能将正在使用的执行者设置为 ArchTaskExecutor#setDelegate
只能在拱形库本身中使用。当然,我们可以停止使用 postValue
并使用一个与 CountingIdlingResource
. 所以,我们不必这样做,有没有其他的方式来切换或整合与。ArchTaskExecutor
让Espresso知道什么时候和什么时候不是空闲状态?
在做了一些调查后,我发现 CountingTaskExecutorRule
是可以在 AndroidX Arch包. 这可以用来构建出一个闲置的资源,像这样。
ublic class CountingTaskExecutorIdlingResource implements IdlingResource {
private final CountingTaskExecutorRule rule;
private ResourceCallback resourceCallback;
public CountingTaskExecutorIdlingResource(CountingTaskExecutorRule rule) {
this.rule = rule;
}
@Override
public String getName() {
return CountingTaskExecutorIdlingResource.class.getName();
}
@Override
public boolean isIdleNow() {
boolean idle = rule.isIdle();
if (idle && resourceCallback != null) {
resourceCallback.onTransitionToIdle();
}
return idle;
}
@Override
public void registerIdleTransitionCallback(ResourceCallback resourceCallback) {
this.resourceCallback = resourceCallback;
}
}