android-test icon indicating copy to clipboard operation
android-test copied to clipboard

ActivityScenario "close()" doesn't work as expected

Open gustavobarbosab opened this issue 2 years ago • 3 comments

Description

I'm running an instrumented test using ActivityScenario, so I launch the test, and after the test finishes, I call the method close() of the ActivityScenario.

Then, I received the following error:

java.lang.AssertionError: Activity never becomes requested state "[DESTROYED]" (last
                  lifecycle transition = "RESUMED")
                  	at androidx.test.core.app.ActivityScenario.waitForActivityToBecomeAnyOf(ActivityScenario.java:449)
                  	at androidx.test.core.app.ActivityScenario.moveToState(ActivityScenario.java:684)
                  	at androidx.test.core.app.ActivityScenario.close(ActivityScenario.java:416)
                  	at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:59)
                  	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
                  	at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
                  	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
                  	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
                  	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
                  	at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
                  	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
                  	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
                  	at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
                  	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
                  	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
                  	at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
                  	at org.junit.runners.Suite.runChild(Suite.java:128)
                  	at org.junit.runners.Suite.runChild(Suite.java:27)
                  	at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
                  	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
                  	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
                  	at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
                  	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
                  	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
                  	at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
                  	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
                  	at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
                  	at androidx.test.internal.runner.TestExecutor.execute(TestExecutor.java:67)
                  	at androidx.test.internal.runner.TestExecutor.execute(TestExecutor.java:58)
                  	at androidx.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:446)
                  	at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2218)

I don't know exactly why, but every time that I move the scenario to state DESTROYED the test crashes with the exception above. When I remove the method "close" calling, the test starts to work as expected.

Steps to Reproduce

  • Create an instrumented test for an Activity
  • Starts the test using the method "ActivityScenario.launch"
  • Closes the scenario using an "@After" JUnit annotation
  • The crash will happen

Some libraries used:

  • Mockk
  • An abstraction of MockWebServer

Expected Results

  • Test pass without problems

Actual Results

  • Test crashing when calling close method.

AndroidX Test and Android OS Versions

MacBook Pro Apple M1 Pro OS: Ventura 13.5 JDK version: java 17.0.8 Gradle version: 8.5 AGP: 8.2.1 AndroidX core library version: 1.5.0 Emulator: Pixel 4 API 33

Link to a public git repo demonstrating the problem:

gustavobarbosab avatar Jan 19 '24 20:01 gustavobarbosab

Up!

pedrofsn avatar Jan 22 '24 14:01 pedrofsn

Can you provide a code sample that repros the problem

brettchabot avatar Jan 22 '24 16:01 brettchabot

@brettchabot I have these tests in a private project, but I'm creating an open-source project to exemplify it and reproduce the error.

I have tried a lot of changes to understand why the error is happening, but I wasn't able. If I use the deprecated ActivityTestRule the test is executed successfully, but when using ActivityScenario the error happens in the moment that I call the method close.

I saw a related problem in another opened issue: https://github.com/android/android-test/issues/143

As soon as possible, I send a snippet of code here...

gustavobarbosab avatar Jan 23 '24 00:01 gustavobarbosab