web-dev-qa-db-fra.com

Référence non résolue: test

J'essaie d'écrire un test d'intégration simple dans mon projet Android écrit entièrement en Kotlin.

Le problème est que le test ne démarre même pas et échoue avec l'erreur suivante:

Error:(4, 36) Unresolved reference: testing
Error:(18, 52) Unresolved reference: InstantTaskExecutorRule
Error:Execution failed for task ':app:kaptGenerateStubsDebugAndroidTestKotlin'.
> Compilation error. See log for more details

J'ai essayé de googler autour de ce problème mais sans succès.

Étapes que j'ai déjà essayé de suivre:

  1. Vérifiez si la bibliothèque qui contient InstantTaskExecutorRule est installée et je peux plonger dans ce package (oui, je peux)
  2. Vérifiez si mon test est placé dans un dossier correct (oui, c'est dans le androidTest)
  3. Vérifiez si je lance mes tests correctement (probablement, je les lance par un clic droit sur le package pkgName (androidTest) puis "Exécuter les tests dans ...")

J'ai également essayé de renommer mes répertoires source en koltin à partir de Java, et de définir les valeurs appropriées sur sourceSets, mais je l'ai changé en raison de l'absence de succès et j'ai considéré que ce n'était pas une raison.

Avis important:

Si je commente la ligne import Android.Arch.core.executor.testing.InstantTaskExecutorRule Et tout le code lié à InstantTaskExecutorRule (ce qui signifie que toute la logique du test sera vide) et que je place un simple assert par exemple, alors tout fonctionne ça va.

Mais je veux utiliser ce InstantTaskExecutorRule particulier et je voudrais savoir quel est réellement le problème et comment le résoudre, ou au moins savoir où dois-je chercher et quoi.

Voici mon code de test:

import Android.Arch.core.executor.testing.InstantTaskExecutorRule
import Android.Arch.persistence.room.Room
import Android.support.test.InstrumentationRegistry
import Android.support.test.runner.AndroidJUnit4

import org.junit.After
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import com.myapp.storage.base.AppDataBase


@RunWith(AndroidJUnit4::class)
class UserDaoTest{
    @JvmField @Rule val instantTaskExecutorRule = InstantTaskExecutorRule()

    private lateinit var db: AppDataBase

    @Before
    @Throws(Exception::class)
    fun setUp(){
        db = Room.inMemoryDatabaseBuilder(InstrumentationRegistry.getContext(), AppDataBase::class.Java)
                .allowMainThreadQueries()
                .build()
    }

    @After
    fun closeDB(){
        db.close()
    }

    @Test
    fun getUsersWhenNoUserInserted(){
        db.userDao().allUsers()
                .test().assertNoValues()
    }

}
14
vendettacore

Selon Google officiel documentation nous devrions ajouter nos assistants de test pour les composants d'architecture (LiveData) de cette manière:

// Test helpers for LiveData
testImplementation "Android.Arch.core:core-testing:1.1.0"

Et au moins pour moi, cela ne fonctionne tout simplement pas. (voir la question ci-dessus)

Comment cela devrait être réellement:

// Test helpers for LiveData
androidTestImplementation "Android.Arch.core:core-testing:1.1.0"

Maintenant, tout fonctionne très bien!

10
vendettacore

Je viens de faire face au même problème, et c'est parce que j'ai importé une version plus récente de junit, 4.13-beta-3. Après avoir rétrogradé à la version 4.12, tout allait bien.

testImplementation "junit:junit:$junit

J'espère que cela peut être utile pour les autres.

6
Paul Wang