Robolectric tests are supported for JetPack Compose now – but not working

Viewed 1773

Robolectric tests are supposedly supported now by Jetpack Compose, since beta09. But I attempted to implement a very simple test (the test for the feature in AOSP, see runClickScenario()) but it does not work for me. Error I get is:

java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.lang.IllegalAccessException: class androidx.test.espresso.base.ThreadPoolExecutorExtractor$2 cannot access a member of class androidx.loader.content.ModernAsyncTask with modifiers "public static final"
java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.lang.IllegalAccessException: class androidx.test.espresso.base.ThreadPoolExecutorExtractor$2 cannot access a member of class androidx.loader.content.ModernAsyncTask with modifiers "public static final"
    at androidx.test.espresso.Espresso.onIdle(Espresso.java:15)
    at androidx.test.espresso.Espresso.onIdle(Espresso.java:1)
    at androidx.compose.ui.test.junit4.android.EspressoLink_androidKt.runEspressoOnIdle(EspressoLink.android.kt:91)
    at androidx.compose.ui.test.junit4.RobolectricIdlingStrategy$runUntilIdle$1.invoke(RobolectricIdlingStrategy.android.kt:69)
    at androidx.compose.ui.test.junit4.RobolectricIdlingStrategy$runUntilIdle$1.invoke(RobolectricIdlingStrategy.android.kt:51)
    at androidx.compose.ui.test.junit4.AndroidSynchronization_androidKt.runOnUiThread(AndroidSynchronization.android.kt:33)
    at androidx.compose.ui.test.junit4.RobolectricIdlingStrategy.runUntilIdle(RobolectricIdlingStrategy.android.kt:51)
    at androidx.compose.ui.test.junit4.AndroidComposeTestRule.waitForIdle(AndroidComposeTestRule.android.kt:293)
    at androidx.compose.ui.test.junit4.AndroidComposeTestRule.waitForIdle(AndroidComposeTestRule.android.kt:286)
    at androidx.compose.ui.test.junit4.AndroidComposeTestRule.setContent(AndroidComposeTestRule.android.kt:281)

(next line in stack trace is my test code.)

I am using:

  • compose 1.0.0
  • kotlin 1.5.10
  • espresso 3.4.0
  • robolectric 4.6.1

It did not matter whether I ran the test in AS or on command line.

1 Answers

I didn't find this when searching before, but the problem is with Robolectric. Fortunately, there's a workaround.

See issue, comments with workaround for reference.

Related