| page.title=Building Effective Unit Tests | |
| page.tags=testing,androidjunitrunner,junit,unit test | |
| trainingnavtop=true | |
| startpage=true | |
| @jd:body | |
| <div id="tb-wrapper"> | |
| <div id="tb"> | |
| <h2> | |
| You should also read | |
| </h2> | |
| <ul> | |
| <li> | |
| <a href="{@docRoot}tools/testing-support-library/index.html">Testing Support Library</a> | |
| </li> | |
| </ul> | |
| </div> | |
| </div> | |
| <p>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. | |
| </p> | |
| <p>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. A | |
| <a href="http://en.wikipedia.org/wiki/Mock_object" class="external-link">mocking framework</a> | |
| can be used to isolate your unit from its dependencies.</p> | |
| <p class="note"><strong>Note:</strong> Unit tests are not suitable for testing | |
| complex UI interaction events. Instead, you should use the UI testing frameworks, as described in | |
| <a href="{@docRoot}training/testing/ui-testing/index.html">Automating UI Tests</a>.</p> | |
| <p>For testing Android apps, you typically create these types of automated unit tests:</p> | |
| <ul> | |
| <li><strong>Local tests:</strong> 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. Use this | |
| approach to run unit tests that have no dependencies on the Android framework or have dependencies | |
| that can be filled by using mock objects.</li> | |
| <li><strong>Instrumented tests:</strong> Unit tests that run on an Android device or emulator. | |
| These tests have access to instrumentation information, such as the | |
| {@link android.content.Context} for the app under test. Use this approach to run unit tests that | |
| have Android dependencies which cannot be easily filled by using mock objects.</li> | |
| </ul> | |
| <p>The lessons in this class teach you how to build these types of automated unit tests.</p> | |
| <h2>Lessons</h2> | |
| <dl> | |
| <dt><strong><a href="local-unit-tests.html"> | |
| Building Local Unit Tests</a></strong></dt> | |
| <dd>Learn how to build unit tests that run on your local machine.</dd> | |
| <dt><strong><a href="instrumented-unit-tests.html"> | |
| Building Instrumented Unit Tests</a></strong></dt> | |
| <dd>Learn how to build unit tests that run on an Android device or emulator.</dd> | |
| </dl> |