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:
androidTest
)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()
}
}
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!
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.