android / android/android-test

ActivityScenario: expectations for Activity.isTaskRoot() behavior

Aperta
#427 9 commenti 14 reazioni 0 assegnatari Vedi su GitHub
Lingua principale
Java
Stelle
1.2k
Fork
342
Merge medio
11h 29m
PR unite (30g)
2

Descrizione

### Description

When using `ActivityScenario` to test activities, the activity under test is not considered as the task root. I guess this is by design since `FLAG_ACTIVITY_NEW_TASK` is masked when launched via `BootstrapActivity` in `InstrumentationActivityInvoker`. For activities that make use of `Activity.isTaskRoot()` this could lead to unexpected behaviors during testing since the activity under test isn't actually the root of the task. This is a behavior change compared to running the test with `ActivityTestRule` or in some cases compared to running the real application. Is it reasonable to expect the activity under test to be considered as the task root even if it is somehow faked or configurable to return true?

### Steps to Reproduce

minimal sample:
```kotlin
// in main source set as the launcher activity
class MainActivity : Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (!isTaskRoot) {
finish()
}
}
}

// in test sources
class MainActivityTest {
@Test
fun scenario() {
ActivityScenario.launch(MainActivity::class.java).onActivity { }
}

@Test
fun testRule() {
val rule = ActivityTestRule(MainActivity::class.java, true, false)
rule.launchActivity(null)
assertTrue(rule.activity.isTaskRoot)
}
}
```

### Expected Results

Be able to test activities that are making use of `isTaskRoot()` reliably.

### Actual Results

scenario test case cannot run `onActivity` since the activity is immediately finished.
testRule test case works as expected.

### AndroidX Test and Android OS Versions

1.2.1-alpha02, API 28

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Inizia da ActivityScenario e dal percorso di avvio di BootstrapActivity, quindi esamina InstrumentationActivityInvoker, dove FLAG_ACTIVITY_NEW_TASK viene mascherato. Riproduci l’esempio Kotlin su API 28 e confronta ActivityScenario con ActivityTestRule; il lavoro è completato quando l’activity sottoposta a test può riportare in modo affidabile il comportamento previsto di isTaskRoot() e lo scenario raggiunge onActivity.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
android, java, kotlin
Ambito
mobile-dev, testing
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.