| # Unit testing Java code | |
| All Java code in the engine should now be able to be tested with Robolectric 4.10.3 | |
| and JUnit 4. The test suite has been added after the bulk of the Java code was | |
| first written, so most of these classes do not have existing tests. Ideally code | |
| after this point should be tested, either with unit tests here or with | |
| integration tests in other repos. | |
| ## Adding a new test | |
| 1. Create a file under `test/` matching the path and name of the class under | |
| test. For example, | |
| `shell/platform/android/io/flutter/util/Preconditions.java` -> | |
| `shell/platform/android/**test**/io/flutter/util/Preconditions**Test**.java`. | |
| 2. Add your file to the `sources` of the `robolectric_tests` build target in | |
| `/shell/platform/android/BUILD.gn`. This compiles the test class into the | |
| test jar. | |
| 3. Import your test class and add it to the `@SuiteClasses` annotation in | |
| `FlutterTestSuite.java`. This makes sure the test is actually executed at | |
| run time. | |
| 4. Write your test. | |
| 5. Build and run with `testing/run_tests.py [--type=java] [--java-filter=<test_class_name>]`. | |
| Note that `testing/run_tests.py` does not build the engine binaries; instead they | |
| should be built prior to running this command and also when the source files | |
| change. See [Compiling the engine](https://github.com/flutter/flutter/wiki/Compiling-the-engine) | |
| for details on how to do so. | |
| ## Q&A | |
| ### My new test won't run. There's a "ClassNotFoundException". | |
| See [Updating Embedding Dependencies](/tools/cipd/android_embedding_bundle). | |
| ### My new test won't compile. It can't find one of my imports. | |
| See [Updating Embedding Dependencies](/tools/cipd/android_embedding_bundle). |