J'ai déjà lu quelques problèmes avec ceci ou un message d'erreur similaire (cela se produit également pour chaque {}), mais aucun d'entre eux ne m'a conduit à un résultat réussi.
Des conseils ou des suggestions sur la façon de faire fonctionner cela?
Voici ma configuration et le test unitaire lui-même:
compileSdkVersion 29
defaultConfig {
minSdkVersion 19
targetSdkVersion 29
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
MockK version: 1.9.3.kotlin12
OS: Android
Kotlin version: 1.3.61
JDK version: jdk1.8.0_212
JUnit version: 4.12
Type of test: unit test
Le stacktrace de l'erreur:
io.mockk.MockKException: Missing calls inside verify { ... } block.
at io.mockk.impl.recording.states.VerifyingState.checkMissingCalls(VerifyingState.kt:52)
at io.mockk.impl.recording.states.VerifyingState.recordingDone(VerifyingState.kt:21)
at io.mockk.impl.recording.CommonCallRecorder.done(CommonCallRecorder.kt:47)
at io.mockk.impl.eval.RecordedBlockEvaluator.record(RecordedBlockEvaluator.kt:60)
at io.mockk.impl.eval.VerifyBlockEvaluator.verify(VerifyBlockEvaluator.kt:30)
at io.mockk.MockKDsl.internalVerify(API.kt:118)
at io.mockk.MockKKt.verify(MockK.kt:139)
at io.mockk.MockKKt.verify$default(MockK.kt:136)
Mon test unitaire:
@Test
fun logout_clearsDatabase() {
coroutineTestRule.testDispatcher.runBlockingTest {
// ARRANGE
database.dataDao().insert(listOf(DataDummies()))
// ACT
sut.logout()
// ASSERT
verify { database.clearAllTables() }
}
}
Je n'ai aucune idée de ce que j'ai fait de mal ici. database.clearAllTables()
est une méthode fournie par Room. Le testDispatcher
est une TestCoroutineDispatcher()
fournie par la bibliothèque de test androidx.
MISE À JOUR/RÉPONSE
Grâce à l'apport de @Juan Cruy Soler, j'ai changé la manière d'injecter la base de données. Je n'ai pas retourné la base de données de la salle réelle, à la place j'en ai renvoyé un espion. De cette façon, l'espion est injecté dans le SUT ainsi que dans ma classe de test. Après cette modification, le test s'exécute comme prévu. Est-ce une solution réalisable à mon problème? Est-il judicieux de laisser (Testing-) DependencyInjection créer un espion?
Vous devez utiliser skype pour simuler un scénario réel.
val database = spyk<YouDataBaseReference>()
En faisant cela, vous pourrez utiliser des fonctions.