android / android/android-test

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

Open
#2,111 3 comments 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
1.2k
Forks
342
Avg merge
11h 29m
Merged PRs (30d)
2

Description

### 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:

Contributor guide

Open the contributing guide

Research direction

Start with ActivityScenario.close() and the stack-trace locations ActivityScenario.java:416, :449, and :684, then reproduce the instrumented test using ActivityScenario.launch and @After. Done means close() reaches DESTROYED without the reported AssertionError; the issue provides no public repository or named test file.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
mobile-dev, testing
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.