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?
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.