blob: 2701a8349bacd7228451016144ba9ad4895742a0 [file] [log] [blame] [view]
# Android Testing in Chromium
## Concepts
- **Native Unit Tests**: Normal Chromium unit tests based on the [gtest framework](/testing/android/docs/gtest_implementation.md). Tests for native code.
- **Java Unit Tests**: JUnit tests that run on the host machine using [Robolectric](http://robolectric.org) to emulate Android APIs.
- **Instrumentation Tests**: JUnit tests that run on Android devices (or emulators).
- **Unit Instrumentation Tests**: Instrumentation tests that test an individual feature. They do not require starting up ContentShell (or Chrome browser). These use [BaseActivityTestRule](https://source.chromium.org/chromium/chromium/src/+/main:base/test/android/javatests/src/org/chromium/base/test/BaseActivityTestRule.java) or [BlankUiTestActivityTestCase](https://source.chromium.org/chromium/chromium/src/+/main:ui/android/javatests/src/org/chromium/ui/test/util/BlankUiTestActivityTestCase.java) based on `BaseActivityTestRule`.
- **Integration Instrumentation Tests**: Instrumentation tests that bring up ContentShell (or Chrome browser) to test a certain feature in the end-to-end flow. These typically use more specialized test rules such as [ContentShellActivityTestRule](https://source.chromium.org/chromium/chromium/src/+/main:content/shell/android/javatests/src/org/chromium/content_shell_apk/ContentShellActivityTestRule.java) or [ChromeActivityTestRule](https://source.chromium.org/chromium/chromium/src/+/main:chrome/test/android/javatests/src/org/chromium/chrome/test/ChromeActivityTestRule.java).
## How do I...
- **set up**
- [... set up a device for local testing?](/testing/android/docs/android_test_instructions.md#physical-device-setup)
- [... set up an emulator for local testing?](/docs/android_emulator.md)
- **writing tests**
- [... write an instrumentation test?](/testing/android/docs/instrumentation.md)
- [... write a JUnit or Robolectric test?](/testing/android/docs/junit.md)
- [... write a test that needs to mock native calls?](/base/android/jni_generator/README.md#testing-mockable-natives)
- **running tests**
- [... run a gtest?](/testing/android/docs/android_test_instructions.md#gtests)
- [... run an instrumentation test?](/testing/android/docs/android_test_instructions.md#instrumentation-tests)
- [... run a JUnit test?](/testing/android/docs/android_test_instructions.md#junit-tests)
- [... run the Web tests?](/docs/testing/web_tests.md)
- [... run a telemetry test?](https://chromium.googlesource.com/catapult/+/HEAD/telemetry/README.md)
- **debugging tests**
- [... debug junit tests?](/testing/android/docs/android_test_instructions.md#junit-tests-debugging)
- [... debug flaky tests?](/testing/android/docs/todo.md)
- **miscellaneous**
- [... use code coverage for Java tests?](/build/android/docs/coverage.md)
## How does it work on Android?
- [gtests](/testing/android/docs/gtest_implementation.md)
- [instrumentation tests](https://source.android.com/compatibility/tests/development/instrumentation)
- [junit tests](/testing/android/docs/junit.md)