Skip to content

KoinApplicationAlreadyStartedException with Robolectric #323

@kfaraj

Description

@kfaraj

Describe the bug
When running tests on Robolectric, subsequent tests fail with the following exception:

A Koin Application has already been started
org.koin.core.error.KoinApplicationAlreadyStartedException: A Koin Application has already been started
	at org.koin.core.context.GlobalContext.register(GlobalContext.kt:44)
	at org.koin.core.context.GlobalContext.startKoin(GlobalContext.kt:63)
	at org.koin.ksp.generated.MainApplicationGencom_kfaraj_samples_koinKt.startKoin(MainApplicationGencom$kfaraj$samples$koin.kt:16)
	at org.koin.ksp.generated.MainApplicationGencom_kfaraj_samples_koinKt.startKoin$default(MainApplicationGencom$kfaraj$samples$koin.kt:15)
	at com.kfaraj.samples.koin.MainApplication.onCreate(MainApplication.kt:12)
	at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1381)
	at org.robolectric.android.internal.RoboMonitoringInstrumentation.callApplicationOnCreate(RoboMonitoringInstrumentation.java:157)
	at org.robolectric.android.internal.AndroidTestEnvironment.lambda$installAndCreateApplication$2(AndroidTestEnvironment.java:407)

To Reproduce
Run the following tests on Robolectric:

import org.koin.ksp.generated.*

@KoinApplication
class MainApplication : Application() {

    override fun onCreate() {
        super.onCreate()
        startKoin()
    }

}

class MainActivity : ComponentActivity()

@OrderWith(Alphanumeric::class)
@RunWith(AndroidJUnit4::class)
class MainActivityTest {

    @Test
    fun launchActivity() {
        launchActivity<MainActivity>()
    }

    @Test
    fun relaunchActivity() {
        launchActivity<MainActivity>()
    }

}

https://github.com/kfaraj/samples/tree/test/koin/koin

Expected behavior
Subsequent tests running on Robolectric should not fail.

Koin project used and used version (please complete the following information):
koin-android version 4.1.1
koin-annotations version 2.3.1

Additional moduleDefinition

  • Running the same tests on Android instead of Robolectric works properly.
  • Running the same tests using Hilt instead of Koin also works properly.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions