Mihai Batista
02/27/2025, 5:13 PMverify
, it complains that the Context is not supplied, the DI is setup using annotations, any ideas what might cause it? i had the assumption that it’s supplied/considered present by default. the stacktrace is:
Missing definition for '[field:'context' - type:'android.content.Context']' in definition '[Singleton: 'com.example.model.repositories.ContextInteractorImpl',binds:com.example.model.repositories.ContextInteractor]'.
org.koin.test.verify.MissingKoinDefinitionException: Missing definition for '[field:'context' - type:'android.content.Context']' in definition '[Singleton: 'com.example.model.repositories.ContextInteractorImpl',binds:com.example.model.repositories.ContextInteractor]'.
at app//org.koin.test.verify.Verification.verifyFactory(Verification.kt:82)
at app//org.koin.test.verify.Verification.verify(Verification.kt:46)
at app//org.koin.test.verify.Verify.verify(VerifyModule.kt:81)
at app//org.koin.test.verify.VerifyModuleKt.verify(VerifyModule.kt:30)
at app//org.koin.test.verify.VerifyModuleKt.verify$default(VerifyModule.kt:30)
at app//com.example.koin.KoinDefinitionsTest.test if koin definitions are complete(KoinDefinitionsTest.kt:17)
at java.base@17.0.13/java.lang.reflect.Method.invoke(Method.java:569)
at java.base@17.0.13/java.util.ArrayList.forEach(ArrayList.java:1511)
at java.base@17.0.13/java.util.ArrayList.forEach(ArrayList.java:1511)
arnaud.giuliani
02/28/2025, 7:45 AMMihai Batista
03/03/2025, 11:00 AMandroidVerify()
fixed the part about context resolving.
I have one behaviour that looks like a bug in androidVerify()
, the injection of a List
cannot be properly verified. the setup looks like this:
@Single
internal class WorManagerImpl(
private val workUnits: List<WorkUnit>,
) : StartupManager {
override fun doWork() {
workUnits.sortedBy { it.priority }.forEach { it.doWork() }
}
}
@Single
class WorkUnit1() : WorkUnit {
override val priority: WorkPriority = RegularPriority
override fun doWork() {
// do some work
}
}
@Single
class WorkUnit2() : WorkUnit {
override val priority: WorkPriority = RegularPriority
override fun doWork() {
// do some work
}
}
Everything works well at runtime, but when running the test with androidVerify()
it fails with:
Missing definition for '[field:'workUnits' - type:'kotlin.collections.List']' in definition '[Singleton: 'com.example.model.managers.WorManagerImpl',binds:com.example.model.managers.WorManager]'.
- Fix your Koin configuration -
1- add missing definition for type 'kotlin.collections.List'. like: singleOf(::kotlin.collections.List)
or
2- else define injection for 'com.example.model.startup.WorManagerImpl' with:
module.verify(
injections = injectedParameters(
definition<com.example.model.managers.WorManagerImpl>(kotlin.collections.List::class)
)
)
arnaud.giuliani
03/03/2025, 4:32 PMMihai Batista
03/04/2025, 11:52 AM