# FragmentScenario

Artifact: [androidx.fragment:fragment-testing](https://developer.android.com/jetpack/androidx/releases/fragment) [View Source](https://cs.android.com/search?q=file:androidx/fragment/app/testing/FragmentScenario.kt+class:androidx.fragment.app.testing.FragmentScenario) Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/fragment#1.1.0)

*** ** * ** ***


```
public final class FragmentScenario<F extends Fragment> implements Closeable
```

<br />

*** ** * ** ***

FragmentScenario provides API to start and drive a Fragment's lifecycle state for testing. It works with arbitrary fragments and works consistently across different versions of the Android framework.

FragmentScenario only supports `https://developer.android.com/reference/androidx/fragment/app/Fragment`. If you are using a deprecated fragment class such as `android.support.v4.app.Fragment` or `https://developer.android.com/reference/android/app/Fragment.html`, please update your code to `https://developer.android.com/reference/androidx/fragment/app/Fragment`.

If your testing Fragment has a dependency to specific theme such as `Theme.AppCompat`, use the theme ID parameter in `https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario#launch(java.lang.Class,android.os.Bundle,androidx.fragment.app.FragmentFactory)` method.

| Parameters |
|---|---|
| `<F extends https://developer.android.com/reference/androidx/fragment/app/Fragment>` | The Fragment class being tested |

| See also |
|---|---|
| `https://developer.android.com/reference/androidx/test/core/app/ActivityScenario` | a scenario API for Activity |

## Summary

| ### Nested types |
|---|
| `public fun interface https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario.FragmentAction<F extends https://developer.android.com/reference/androidx/fragment/app/Fragment>` FragmentAction interface should be implemented by any class whose instances are intended to be executed by the main thread. |

| ### Public methods |
|---|---|
| `void` | `https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario#close()()` Finishes the managed fragments and cleans up device's state. |
| `static final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario<@https://developer.android.com/reference/androidx/annotation/NonNull F>` | `<F extends https://developer.android.com/reference/androidx/fragment/app/Fragment> https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario#launch(java.lang.Class,android.os.Bundle,androidx.fragment.app.FragmentFactory)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Class.html<@https://developer.android.com/reference/androidx/annotation/NonNull F> fragmentClass, https://developer.android.com/reference/android/os/Bundle.html fragmentArgs, https://developer.android.com/reference/androidx/fragment/app/FragmentFactory factory )` Launches a Fragment with given arguments hosted by an empty `https://developer.android.com/reference/androidx/fragment/app/FragmentActivity` using the given `https://developer.android.com/reference/androidx/fragment/app/FragmentFactory` and waits for it to reach the resumed state. |
| `static final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario<@https://developer.android.com/reference/androidx/annotation/NonNull F>` | `<F extends https://developer.android.com/reference/androidx/fragment/app/Fragment> https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario#launch(java.lang.Class,android.os.Bundle,kotlin.Int,androidx.fragment.app.FragmentFactory)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Class.html<@https://developer.android.com/reference/androidx/annotation/NonNull F> fragmentClass, https://developer.android.com/reference/android/os/Bundle.html fragmentArgs, @https://developer.android.com/reference/androidx/annotation/StyleRes int themeResId, https://developer.android.com/reference/androidx/fragment/app/FragmentFactory factory )` Launches a Fragment with given arguments hosted by an empty `https://developer.android.com/reference/androidx/fragment/app/FragmentActivity` themed by `https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario.Companion#launch(java.lang.Class,android.os.Bundle,kotlin.Int,androidx.fragment.app.FragmentFactory)`, using the given `https://developer.android.com/reference/androidx/fragment/app/FragmentFactory` and waits for it to reach the resumed state. |
| `static final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario<@https://developer.android.com/reference/androidx/annotation/NonNull F>` | `<F extends https://developer.android.com/reference/androidx/fragment/app/Fragment> https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario#launch(java.lang.Class,android.os.Bundle,kotlin.Int,androidx.lifecycle.Lifecycle.State,androidx.fragment.app.FragmentFactory)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Class.html<@https://developer.android.com/reference/androidx/annotation/NonNull F> fragmentClass, https://developer.android.com/reference/android/os/Bundle.html fragmentArgs, @https://developer.android.com/reference/androidx/annotation/StyleRes int themeResId, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/lifecycle/Lifecycle.State initialState, https://developer.android.com/reference/androidx/fragment/app/FragmentFactory factory )` Launches a Fragment with given arguments hosted by an empty `https://developer.android.com/reference/androidx/fragment/app/FragmentActivity` themed by `https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario.Companion#launch(java.lang.Class,android.os.Bundle,kotlin.Int,androidx.lifecycle.Lifecycle.State,androidx.fragment.app.FragmentFactory)`, using the given `https://developer.android.com/reference/androidx/fragment/app/FragmentFactory` and waits for it to reach `https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario.Companion#launch(java.lang.Class,android.os.Bundle,kotlin.Int,androidx.lifecycle.Lifecycle.State,androidx.fragment.app.FragmentFactory)`. |
| `static final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario<@https://developer.android.com/reference/androidx/annotation/NonNull F>` | `<F extends https://developer.android.com/reference/androidx/fragment/app/Fragment> https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario#launchInContainer(java.lang.Class,android.os.Bundle,androidx.fragment.app.FragmentFactory)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Class.html<@https://developer.android.com/reference/androidx/annotation/NonNull F> fragmentClass, https://developer.android.com/reference/android/os/Bundle.html fragmentArgs, https://developer.android.com/reference/androidx/fragment/app/FragmentFactory factory )` Launches a Fragment in the Activity's root view container `android.R.id.content`, with given arguments hosted by an empty `https://developer.android.com/reference/androidx/fragment/app/FragmentActivity` using the given `https://developer.android.com/reference/androidx/fragment/app/FragmentFactory` and waits for it to reach the resumed state. |
| `static final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario<@https://developer.android.com/reference/androidx/annotation/NonNull F>` | `<F extends https://developer.android.com/reference/androidx/fragment/app/Fragment> https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario#launchInContainer(java.lang.Class,android.os.Bundle,kotlin.Int,androidx.fragment.app.FragmentFactory)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Class.html<@https://developer.android.com/reference/androidx/annotation/NonNull F> fragmentClass, https://developer.android.com/reference/android/os/Bundle.html fragmentArgs, @https://developer.android.com/reference/androidx/annotation/StyleRes int themeResId, https://developer.android.com/reference/androidx/fragment/app/FragmentFactory factory )` Launches a Fragment in the Activity's root view container `android.R.id.content`, with given arguments hosted by an empty `https://developer.android.com/reference/androidx/fragment/app/FragmentActivity` themed by `https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario.Companion#launchInContainer(java.lang.Class,android.os.Bundle,kotlin.Int,androidx.fragment.app.FragmentFactory)`, using the given `https://developer.android.com/reference/androidx/fragment/app/FragmentFactory` and waits for it to reach the resumed state. |
| `static final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario<@https://developer.android.com/reference/androidx/annotation/NonNull F>` | `<F extends https://developer.android.com/reference/androidx/fragment/app/Fragment> https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario#launchInContainer(java.lang.Class,android.os.Bundle,kotlin.Int,androidx.lifecycle.Lifecycle.State,androidx.fragment.app.FragmentFactory)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Class.html<@https://developer.android.com/reference/androidx/annotation/NonNull F> fragmentClass, https://developer.android.com/reference/android/os/Bundle.html fragmentArgs, @https://developer.android.com/reference/androidx/annotation/StyleRes int themeResId, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/lifecycle/Lifecycle.State initialState, https://developer.android.com/reference/androidx/fragment/app/FragmentFactory factory )` Launches a Fragment in the Activity's root view container `android.R.id.content`, with given arguments hosted by an empty `https://developer.android.com/reference/androidx/fragment/app/FragmentActivity` themed by `https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario.Companion#launchInContainer(java.lang.Class,android.os.Bundle,kotlin.Int,androidx.lifecycle.Lifecycle.State,androidx.fragment.app.FragmentFactory)`, using the given `https://developer.android.com/reference/androidx/fragment/app/FragmentFactory` and waits for it to reach `https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario.Companion#launchInContainer(java.lang.Class,android.os.Bundle,kotlin.Int,androidx.lifecycle.Lifecycle.State,androidx.fragment.app.FragmentFactory)`. |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario<@https://developer.android.com/reference/androidx/annotation/NonNull F>` | `https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario#moveToState(androidx.lifecycle.Lifecycle.State)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/lifecycle/Lifecycle.State newState)` Moves Fragment state to a new state. |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario<@https://developer.android.com/reference/androidx/annotation/NonNull F>` | `https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario#onFragment(androidx.fragment.app.testing.FragmentScenario.FragmentAction)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario.FragmentAction<@https://developer.android.com/reference/androidx/annotation/NonNull F> action)` Runs a given `https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario#onFragment(androidx.fragment.app.testing.FragmentScenario.FragmentAction)` on the current Activity's main thread. |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario<@https://developer.android.com/reference/androidx/annotation/NonNull F>` | `https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario#recreate()()` Recreates the host Activity. |

| ### Extension functions |
|---|---|
| `final @https://developer.android.com/reference/androidx/annotation/NonNull T` | `<F extends https://developer.android.com/reference/androidx/fragment/app/Fragment, T extends https://developer.android.com/reference/java/lang/Object.html> https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenarioKt.https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario#(androidx.fragment.app.testing.FragmentScenario).withFragment(kotlin.Function1)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario<@https://developer.android.com/reference/androidx/annotation/NonNull F> receiver, @https://developer.android.com/reference/androidx/annotation/NonNull Function1<@https://developer.android.com/reference/androidx/annotation/NonNull F, @https://developer.android.com/reference/androidx/annotation/NonNull T> block )` Run `https://developer.android.com/reference/androidx/fragment/app/testing/package-summary#(androidx.fragment.app.testing.FragmentScenario).withFragment(kotlin.Function1)` using `https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario#onFragment(androidx.fragment.app.testing.FragmentScenario.FragmentAction)`, returning the result of the `https://developer.android.com/reference/androidx/fragment/app/testing/package-summary#(androidx.fragment.app.testing.FragmentScenario).withFragment(kotlin.Function1)`. |

## Public methods

### close

Added in [1.4.0](https://developer.android.com/jetpack/androidx/releases/fragment#1.4.0)

```
public void close()
```

Finishes the managed fragments and cleans up device's state. This method blocks execution until the host activity becomes `https://developer.android.com/reference/androidx/lifecycle/Lifecycle.State#DESTROYED`.

### launch

Added in [1.3.0](https://developer.android.com/jetpack/androidx/releases/fragment#1.3.0)

```
public static final @NonNull FragmentScenario<@NonNull F> <F extends Fragment> launch(
    @NonNull Class<@NonNull F> fragmentClass,
    Bundle fragmentArgs,
    FragmentFactory factory
)
```

Launches a Fragment with given arguments hosted by an empty `https://developer.android.com/reference/androidx/fragment/app/FragmentActivity` using the given `https://developer.android.com/reference/androidx/fragment/app/FragmentFactory` and waits for it to reach the resumed state.

This method cannot be called from the main thread.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Class.html<@https://developer.android.com/reference/androidx/annotation/NonNull F> fragmentClass` | a fragment class to instantiate |
| `https://developer.android.com/reference/android/os/Bundle.html fragmentArgs` | a bundle to passed into fragment |
| `https://developer.android.com/reference/androidx/fragment/app/FragmentFactory factory` | a fragment factory to use or null to use default factory |

### launch

Added in [1.3.0](https://developer.android.com/jetpack/androidx/releases/fragment#1.3.0)

```
public static final @NonNull FragmentScenario<@NonNull F> <F extends Fragment> launch(
    @NonNull Class<@NonNull F> fragmentClass,
    Bundle fragmentArgs,
    @StyleRes int themeResId,
    FragmentFactory factory
)
```

Launches a Fragment with given arguments hosted by an empty `https://developer.android.com/reference/androidx/fragment/app/FragmentActivity` themed by `https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario.Companion#launch(java.lang.Class,android.os.Bundle,kotlin.Int,androidx.fragment.app.FragmentFactory)`, using the given `https://developer.android.com/reference/androidx/fragment/app/FragmentFactory` and waits for it to reach the resumed state.

This method cannot be called from the main thread.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Class.html<@https://developer.android.com/reference/androidx/annotation/NonNull F> fragmentClass` | a fragment class to instantiate |
| `https://developer.android.com/reference/android/os/Bundle.html fragmentArgs` | a bundle to passed into fragment |
| `@https://developer.android.com/reference/androidx/annotation/StyleRes int themeResId` | a style resource id to be set to the host activity's theme |
| `https://developer.android.com/reference/androidx/fragment/app/FragmentFactory factory` | a fragment factory to use or null to use default factory |

### launch

Added in [1.3.0](https://developer.android.com/jetpack/androidx/releases/fragment#1.3.0)

```
public static final @NonNull FragmentScenario<@NonNull F> <F extends Fragment> launch(
    @NonNull Class<@NonNull F> fragmentClass,
    Bundle fragmentArgs,
    @StyleRes int themeResId,
    @NonNull Lifecycle.State initialState,
    FragmentFactory factory
)
```

Launches a Fragment with given arguments hosted by an empty `https://developer.android.com/reference/androidx/fragment/app/FragmentActivity` themed by `https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario.Companion#launch(java.lang.Class,android.os.Bundle,kotlin.Int,androidx.lifecycle.Lifecycle.State,androidx.fragment.app.FragmentFactory)`, using the given `https://developer.android.com/reference/androidx/fragment/app/FragmentFactory` and waits for it to reach `https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario.Companion#launch(java.lang.Class,android.os.Bundle,kotlin.Int,androidx.lifecycle.Lifecycle.State,androidx.fragment.app.FragmentFactory)`.

This method cannot be called from the main thread.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Class.html<@https://developer.android.com/reference/androidx/annotation/NonNull F> fragmentClass` | a fragment class to instantiate |
| `https://developer.android.com/reference/android/os/Bundle.html fragmentArgs` | a bundle to passed into fragment |
| `@https://developer.android.com/reference/androidx/annotation/StyleRes int themeResId` | a style resource id to be set to the host activity's theme |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/lifecycle/Lifecycle.State initialState` | The initial `https://developer.android.com/reference/androidx/lifecycle/Lifecycle.State`. Passing in `https://developer.android.com/reference/androidx/lifecycle/Lifecycle.State#DESTROYED` will result in an `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html`. |
| `https://developer.android.com/reference/androidx/fragment/app/FragmentFactory factory` | a fragment factory to use or null to use default factory |

### launchInContainer

Added in [1.3.0](https://developer.android.com/jetpack/androidx/releases/fragment#1.3.0)

```
public static final @NonNull FragmentScenario<@NonNull F> <F extends Fragment> launchInContainer(
    @NonNull Class<@NonNull F> fragmentClass,
    Bundle fragmentArgs,
    FragmentFactory factory
)
```

Launches a Fragment in the Activity's root view container `android.R.id.content`, with given arguments hosted by an empty `https://developer.android.com/reference/androidx/fragment/app/FragmentActivity` using the given `https://developer.android.com/reference/androidx/fragment/app/FragmentFactory` and waits for it to reach the resumed state.

This method cannot be called from the main thread.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Class.html<@https://developer.android.com/reference/androidx/annotation/NonNull F> fragmentClass` | a fragment class to instantiate |
| `https://developer.android.com/reference/android/os/Bundle.html fragmentArgs` | a bundle to passed into fragment |
| `https://developer.android.com/reference/androidx/fragment/app/FragmentFactory factory` | a fragment factory to use or null to use default factory |

### launchInContainer

Added in [1.3.0](https://developer.android.com/jetpack/androidx/releases/fragment#1.3.0)

```
public static final @NonNull FragmentScenario<@NonNull F> <F extends Fragment> launchInContainer(
    @NonNull Class<@NonNull F> fragmentClass,
    Bundle fragmentArgs,
    @StyleRes int themeResId,
    FragmentFactory factory
)
```

Launches a Fragment in the Activity's root view container `android.R.id.content`, with given arguments hosted by an empty `https://developer.android.com/reference/androidx/fragment/app/FragmentActivity` themed by `https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario.Companion#launchInContainer(java.lang.Class,android.os.Bundle,kotlin.Int,androidx.fragment.app.FragmentFactory)`, using the given `https://developer.android.com/reference/androidx/fragment/app/FragmentFactory` and waits for it to reach the resumed state.

This method cannot be called from the main thread.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Class.html<@https://developer.android.com/reference/androidx/annotation/NonNull F> fragmentClass` | a fragment class to instantiate |
| `https://developer.android.com/reference/android/os/Bundle.html fragmentArgs` | a bundle to passed into fragment |
| `@https://developer.android.com/reference/androidx/annotation/StyleRes int themeResId` | a style resource id to be set to the host activity's theme |
| `https://developer.android.com/reference/androidx/fragment/app/FragmentFactory factory` | a fragment factory to use or null to use default factory |

### launchInContainer

Added in [1.3.0](https://developer.android.com/jetpack/androidx/releases/fragment#1.3.0)

```
public static final @NonNull FragmentScenario<@NonNull F> <F extends Fragment> launchInContainer(
    @NonNull Class<@NonNull F> fragmentClass,
    Bundle fragmentArgs,
    @StyleRes int themeResId,
    @NonNull Lifecycle.State initialState,
    FragmentFactory factory
)
```

Launches a Fragment in the Activity's root view container `android.R.id.content`, with given arguments hosted by an empty `https://developer.android.com/reference/androidx/fragment/app/FragmentActivity` themed by `https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario.Companion#launchInContainer(java.lang.Class,android.os.Bundle,kotlin.Int,androidx.lifecycle.Lifecycle.State,androidx.fragment.app.FragmentFactory)`, using the given `https://developer.android.com/reference/androidx/fragment/app/FragmentFactory` and waits for it to reach `https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario.Companion#launchInContainer(java.lang.Class,android.os.Bundle,kotlin.Int,androidx.lifecycle.Lifecycle.State,androidx.fragment.app.FragmentFactory)`.

This method cannot be called from the main thread.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/Class.html<@https://developer.android.com/reference/androidx/annotation/NonNull F> fragmentClass` | a fragment class to instantiate |
| `https://developer.android.com/reference/android/os/Bundle.html fragmentArgs` | a bundle to passed into fragment |
| `@https://developer.android.com/reference/androidx/annotation/StyleRes int themeResId` | a style resource id to be set to the host activity's theme |
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/lifecycle/Lifecycle.State initialState` | The initial `https://developer.android.com/reference/androidx/lifecycle/Lifecycle.State`. Passing in `https://developer.android.com/reference/androidx/lifecycle/Lifecycle.State#DESTROYED` will result in an `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html`. |
| `https://developer.android.com/reference/androidx/fragment/app/FragmentFactory factory` | a fragment factory to use or null to use default factory |

### moveToState

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/fragment#1.1.0)

```
public final @NonNull FragmentScenario<@NonNull F> moveToState(@NonNull Lifecycle.State newState)
```

Moves Fragment state to a new state.

If a new state and current state are the same, this method does nothing. It accepts all `https://developer.android.com/reference/androidx/lifecycle/Lifecycle.State`s. `https://developer.android.com/reference/androidx/lifecycle/Lifecycle.State#DESTROYED` is a terminal state. You cannot move to any other state after the Fragment reaches that state.

This method cannot be called from the main thread.

### onFragment

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/fragment#1.1.0)

```
public final @NonNull FragmentScenario<@NonNull F> onFragment(@NonNull FragmentScenario.FragmentAction<@NonNull F> action)
```

Runs a given `https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario#onFragment(androidx.fragment.app.testing.FragmentScenario.FragmentAction)` on the current Activity's main thread.

Note that you should never keep Fragment reference passed into your `https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario#onFragment(androidx.fragment.app.testing.FragmentScenario.FragmentAction)` because it can be recreated at anytime during state transitions.

Throwing an exception from `https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario#onFragment(androidx.fragment.app.testing.FragmentScenario.FragmentAction)` makes the host Activity crash. You can inspect the exception in logcat outputs.

This method cannot be called from the main thread.

### recreate

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/fragment#1.1.0)

```
public final @NonNull FragmentScenario<@NonNull F> recreate()
```

Recreates the host Activity.

After this method call, it is ensured that the Fragment state goes back to the same state as its previous state.

This method cannot be called from the main thread.

## Extension functions

### FragmentScenarioKt.withFragment

Artifact: [androidx.fragment:fragment-testing](https://developer.android.com/jetpack/androidx/releases/fragment) [View Source](https://cs.android.com/search?q=file:androidx/fragment/app/testing/FragmentScenario.kt+function:withFragment)

```
public final @NonNull T <F extends Fragment, T extends Object> FragmentScenarioKt.withFragment(
    @NonNull FragmentScenario<@NonNull F> receiver,
    @NonNull Function1<@NonNull F, @NonNull T> block
)
```

Run `https://developer.android.com/reference/androidx/fragment/app/testing/package-summary#(androidx.fragment.app.testing.FragmentScenario).withFragment(kotlin.Function1)` using `https://developer.android.com/reference/androidx/fragment/app/testing/FragmentScenario#onFragment(androidx.fragment.app.testing.FragmentScenario.FragmentAction)`, returning the result of the `https://developer.android.com/reference/androidx/fragment/app/testing/package-summary#(androidx.fragment.app.testing.FragmentScenario).withFragment(kotlin.Function1)`.

If any exceptions are raised while running `https://developer.android.com/reference/androidx/fragment/app/testing/package-summary#(androidx.fragment.app.testing.FragmentScenario).withFragment(kotlin.Function1)`, they are rethrown.