Build effective unit tests

Unit tests are the fundamental tests in your app testing strategy. By creating and running unit
tests against your code, you can easily verify that the logic of individual units is correct.
Running unit tests after every build helps you to
quickly catch and fix software regressions introduced by code changes to your app.

A unit test generally exercises the functionality of the smallest possible unit of code (which
could be a method, class, or component) in a repeatable way. You should build unit tests when you
need to verify the logic of specific code in your app. For example, if you are unit testing a
class, your test might check that the class is in the right state. Typically, the unit of code
is tested in isolation; your test affects and monitors changes to that unit only.
You can use dependency providers like Robolectric or a
mocking framework
to isolate your unit from its dependencies.

Note: Unit tests are not suitable for testing
complex UI interaction events. Instead, you should use the UI testing frameworks, as described in
Automating UI Tests.

For testing Android apps, you typically create these types of automated unit tests:

Local tests: Unit tests that run on your local machine
only. These tests are compiled to run locally on the Java Virtual Machine (JVM)
to minimize execution time. If your tests depend on objects in the Android
framework, we recommend using Robolectric. For tests that depend on your
own dependencies, use mock objects to emulate your dependencies' behavior.

Instrumented tests: Unit tests that run on an Android device or emulator.
These tests have access to instrumentation information, such as the
Context for the app under test.
Use this approach to run unit tests that have complex Android dependencies that require a more
robust environment, such as Robolectric.

The lessons in this class teach you how to build these types of automated unit tests.