web-dev-qa-db-fra.com

Impossible d'appeler observeForever sur un thread d'arrière-plan

J'utilise une méthode observeForever() comme décrit ici pour tester Room et LiveData depuis un certain temps, et cela a fonctionné parfaitement. Mais quand je suis passé à Android Studio 3.2 (ou si c'était le refactoring androidx, pas sûr)), cette méthode a soudainement cessé de fonctionner, lançant un

Java.lang.IllegalStateException: Cannot invoke observeForever on a background thread

Comment pouvons-nous régler ceci?

9
Algar

Je l'ai résolu en ajoutant la règle InstantTaskExecutorRule. Selon le docs il sera

Une règle de test JUnit qui échange l'exécuteur en arrière-plan utilisé par les composants d'architecture avec un autre qui exécute chaque tâche de manière synchrone.

Il faut donc ajouter

@get:Rule
var instantTaskExecutorRule = InstantTaskExecutorRule()

à la classe de test pour que cela fonctionne. L'équivalent Java serait

@Rule
public InstantTaskExecutorRule instantTaskExecutorRule = new InstantTaskExecutorRule();

Vous devrez également ajouter

androidTestImplementation "androidx.Arch.core:core-testing:2.0.0"

à vos dépendances build.gradle.

21
Algar