From 97f483b4ca7df0dc12f4a5b251b4f59767491780 Mon Sep 17 00:00:00 2001 From: "smain@google.com" Date: Tue, 14 Jun 2016 11:37:19 -0700 Subject: [PATCH] Move conceptual test info into "Getting Started with Testing" and move the procedural information into the corresponding guides for creating unit tests. This is part of a cleanup for the Android Studio test docs, simplifying the amount of content covered with Android Studio to be strictly how to create and run tests. Bug: 28470079 Related: https://critique.corp.google.com/#review/125115510 Change-Id: I8b9590045b42a03c618e7011e0c3741aede77cd8 --- docs/html/images/testing/test-types.zip | Bin 0 -> 15136 bytes docs/html/images/testing/test-types_2x.png | Bin 0 -> 89115 bytes docs/html/training/testing/start/index.jd | 795 +++++++----------- .../unit-testing/instrumented-unit-tests.jd | 311 ++++++- .../testing/unit-testing/local-unit-tests.jd | 82 +- 5 files changed, 662 insertions(+), 526 deletions(-) create mode 100644 docs/html/images/testing/test-types.zip create mode 100644 docs/html/images/testing/test-types_2x.png diff --git a/docs/html/images/testing/test-types.zip b/docs/html/images/testing/test-types.zip new file mode 100644 index 0000000000000000000000000000000000000000..d433b915ff15adc6232e1c49234f180dba732aa9 GIT binary patch literal 15136 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 JvHtPx{{jaWDFFZg literal 0 HcmV?d00001 diff --git a/docs/html/images/testing/test-types_2x.png b/docs/html/images/testing/test-types_2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0a374aaf65382f2d9ce3c7b824be5b168ee3e00d GIT binary patch literal 89115 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%0Do>@;+0SmZE>r3c}>w8P-;Cg4)M8qnnx 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 literal 0 HcmV?d00001 diff --git a/docs/html/training/testing/start/index.jd b/docs/html/training/testing/start/index.jd index 707ba9d8f65a1..aa0473f6d09f1 100644 --- a/docs/html/training/testing/start/index.jd +++ b/docs/html/training/testing/start/index.jd @@ -9,51 +9,20 @@ page.image=images/tools/studio-main-screen.png

- Dependencies and prerequisites -

- - - -

- This lesson teaches you to + In this document

    -
  1. - Configure Your Project for Local Unit - Tests -
  2. - -
  3. - Configure Your Project for - Instrumented Tests -
  4. - -
  5. - Build and Run Your Tests +
  6. Test Types
  7. +
  8. Test APIs
      -
    1. - Run Local Unit Tests -
    2. - -
    3. - Run Instrumented Tests -
    4. - -
    5. - Run Instrumented Tests with Cloud Test Lab -
    6. +
    7. JUnit
    8. +
    9. Android Testing Support Library
    10. +
    11. Assertion classes
    12. +
    13. Monkey and monkeyrunner
  9. +
  10. Guides for Building Android Tests

@@ -61,10 +30,6 @@ page.image=images/tools/studio-main-screen.png

    -
  • - Testing - Concepts -
  • - Writing and running tests are important parts of the Android app development - cycle. Well-written tests can help you catch bugs early in development and - give you confidence in your code. Using Android Studio, you can run local - unit tests or instrumented tests on a variety of physical or virtual Android - devices. You can then analyze the results and make changes to your code - without leaving the development environment. + Android tests are based on JUnit, and you can run them either as local + unit tests on the JVM or as instrumented tests on an Android device. + This page provides an introduction to the concepts and + tools for building Android tests.

    -

    - Local unit tests are tests that run on your local machine, without - needing access to the Android framework or an Android device. To learn how to - develop local units tests, see Building - Local Unit Tests. -

    -

    - Instrumented tests are tests that run on an Android device or - emulator. These tests have access to {@link android.app.Instrumentation} - information, such as the {@link android.content.Context} for the app under - test. Instrumented tests can be used for unit, user interface (UI), or app - component integration testing. To learn how to develop instrumented tests for - your specific needs, see these additional topics: -

    +

    Test Types

    + + +

    When using Android Studio to write any of your tests, your test code must go +into one of two different code directories (source sets). For each module in +your project, Android Studio includes both source sets, corresponding to the +following test types:

    + +
    +
    Local unit tests
    +
    Located at module-name/src/test/java/. +

    These tests run on the local JVM +and do not have access to functional Android framework APIs.

    +

    To get started, see Building Local +Unit Tests.

    +
    + +
    Instrumented tests
    +
    Located at module-name/src/androidTest/java/. +

    These are all tests that must run on an Android hardware device or +an Android emulator.

    + +

    Instrumented tests are built into an APK that runs on the device alongside +your app under test. The system runs your test APK and your app under tests in +the same process, so your tests can invoke methods and modify fields in the +app, and automate user interaction with your app.

    + +

    For information about how to create instrumented tests, see the +following topics:

    • Building - Instrumented Unit Tests - Build more complex unit tests that have - Android dependencies which cannot be easily filled by using mock objects. + "{@docRoot}training/testing/unit-testing/instrumented-unit-tests.html" + >Building Instrumented Unit Tests: Build complex unit tests with + Android dependencies that cannot be satisfied with mock objects.
    • Automating User - Interface Tests - Create tests to verify that the user interface + Interface Tests: Create tests to verify that the user interface behaves correctly for user interactions within a single app or for interactions across multiple apps.
    • Testing - App Component Integrations - Verify the behavior of components that + App Component Integrations: Verify the behavior of components that users do not directly interact with, such as a Service or a Content Provider. + "{@docRoot}guide/topics/providers/content-providers.html">Content Provider.
    -

    - This lesson teaches you how to build and run your tests using using Android - Studio. If you are not using Android Studio, you can learn how to - run your tests from - the command-line. -

    +
    +
    -

    - Configure Your Project for Local Unit Tests -

    + -

    - In your Android Studio project, you must store the source files for local - unit tests under a specific source directory ({@code src/test/java}). This - improves project organization by grouping your unit tests together into a - single source set. -

    - -

    - As with production code, you can create local unit tests for a specific - flavor or build type. Keep your unit tests in a test source tree location - that corresponds to your production source tree, such as: -

    +

    However, the local unit tests and instrumented tests +described above are just terms that help distinguish the tests that run on your +local JVM from the tests that run on the Android platform (on a hardware device +or emulator). The real testing types that you should understand when building a +complete test suite are described in the following table.

    - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Path to Production ClassPath to Local Unit Test Class
    {@code src/main/java/Foo.java}{@code src/test/java/FooTest.java}
    {@code src/debug/java/Foo.java}{@code src/testDebug/java/FooTest.java}
    {@code src/myFlavor/java/Foo.java}{@code src/testMyFlavor/java/FooTest.java}
    + Type + + Subtype + + Description +
    + Unit tests +
    + Local Unit Tests + + Unit tests that run locally on the Java Virtual Machine (JVM). Use these +tests to minimize execution time when your tests have no Android framework +dependencies or when you can mock the Android framework dependencies. +
    + Instrumented unit tests + + Unit tests that run on an Android device or emulator. These tests have +access to Instrumentation +information, such as the Context of the app you are +testing. Use these tests when your tests have Android dependencies that mock +objects cannot satisfy. +
    + Integration Tests +
    + Components within your app only + + This type of test verifies that the target app behaves as expected when +a user performs a specific action or enters a specific input in its activities. +For example, it allows you to check that the target app returns the correct UI +output in response to user interactions in the app’s activities. UI testing +frameworks like Espresso allow +you to programmatically simulate user actions and test complex intra-app user +interactions. +
    + Cross-app Components + + This type of test verifies the correct behavior of interactions between +different user apps or between user apps and system apps. For example, you might +want to test that your app behaves correctly when the user performs an action +in the Android Settings menu. UI testing frameworks that support cross-app +interactions, such as UI Automator, allow you to create tests for such scenarios. +
    -

    - You'll need to configure the testing dependencies for your project to use the - standard APIs provided by the JUnit 4 framework. If your test needs to - interact with Android dependencies, include the Mockito - library to simplify your local unit tests. To learn more about using mock - objects in your local unit tests, see - Mocking Android dependencies. -

    -

    - In your app's top-level {@code build.gradle} file, you need to specify these - libraries as dependencies: -

    + + + + +

    Test APIs

    + +

    The following are common APIs used for testing apps on Android.

    + + +

    JUnit

    + +

    You should write your unit or integration test class as a JUnit 4 test class. The framework +offers a convenient way to perform common setup, teardown, and assertion +operations in your test.

    + +

    A basic JUnit 4 test class is a Java class that contains one or more test +methods. A test method begins with the @Test annotation and +contains the code to exercise and verify a single functionality (that is, a +logical unit) in the component that you want to test.

    + +

    The following snippet shows an example JUnit 4 integration test that uses the +Espresso +APIs to perform a click action on a UI element, then checks to see if +an expected string is displayed.

    -dependencies {
    -    // Required -- JUnit 4 framework
    -    testCompile 'junit:junit:4.12'
    -    // Optional -- Mockito framework
    -    testCompile 'org.mockito:mockito-core:1.10.19'
    -}
    -
    +@RunWith(AndroidJUnit4.class) +@LargeTest +public class MainActivityInstrumentationTest { -

    - Configure Your Project for Instrumented Tests -

    + @Rule + public ActivityTestRule mActivityRule = new ActivityTestRule<>( + MainActivity.class); -

    - In your Android Studio project, you must place the source code for your - instrumentated tests under a specific directory - (src/androidTest/java). -

    + @Test + public void sayHello(){ + onView(withText("Say hello!")).perform(click()); -

    - Download - the Android Testing Support Library Setup, which provides APIs that allow - you to quickly build and run instrumented test code for your apps. The - Testing Support Library includes a JUnit 4 test runner (AndroidJUnitRunner - ) and APIs for functional UI tests (Espresso - and UI - Automator). -

    - -

    - You'll need to configure the Android testing dependencies for your project to - use the test runner and the rules APIs provided by the Testing Support - Library. To simplify your test development, we also recommend that you - include the Hamcrest library, which lets you create more flexible - assertions using the Hamcrest matcher APIs. -

    - -

    - In your app's top-level {@code build.gradle} file, you need to specify these - libraries as dependencies: -

    - -
    -dependencies {
    -    androidTestCompile 'com.android.support:support-annotations:23.0.1'
    -    androidTestCompile 'com.android.support.test:runner:0.4.1'
    -    androidTestCompile 'com.android.support.test:rules:0.4.1'
    -    // Optional -- Hamcrest library
    -    androidTestCompile 'org.hamcrest:hamcrest-library:1.3'
    -    // Optional -- UI testing with Espresso
    -    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1'
    -    // Optional -- UI testing with UI Automator
    -    androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.1'
    -}
    -
    - - -

    - To use JUnit 4 test classes, make sure to specify {@code - AndroidJUnitRunner} as the default test instrumentation runner in your - project by including the following setting in your app's module-level {@code build.gradle} - file: -

    - -
    -android {
    -    defaultConfig {
    -        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    +        onView(withId(R.id.textView)).check(matches(withText("Hello, World!")));
         }
     }
     
    -

    Work With Test Artifacts

    -

    Android Studio has two types of test artifacts: Android Instrumentation Tests -and Unit Tests. Previously, you could work with just one test artifact at a -time. Now, both test artifacts are enabled. -The advantage of enabling both test artifacts is that any changes you make to -the underlying code affect -them both. For example, if you rename a class that both test artifacts access, -both will know about the class name refactoring.

    - -

    The figure shows what your project looks like with both test -artifacts enabled. Notice the shading of both test artifacts.

    - - - - - -

    Build and Run Your Tests

    - - -

    - Android Studio provides all the tools you need to build, run, and analyze - your tests within the development environment. You can also run instrumented - tests on multiple device configurations, simultaneously, using Cloud Test Lab - integration. -

    - -

    - Note: While running or debugging instrumented tests, - Android Studio does not inject the additional methods required for Instant Run - and turns the feature off. -

    - -

    - Run Local Unit Tests -

    - -

    - To run your local unit tests: -

    - -
      - -
    1. In the Project window, right click on the project and - synchronize your project. -
    2. - - - -
    3. In the Project window, navigate to your unit test class or - method, then right-click it and select Run . -
        -
      • To run all tests in the unit test directory, right-click on the - directory and select Run tests . -
      • -
      -
    4. - -
    - -

    - The Android Plugin for Gradle compiles the local unit test code located in - the default directory ({@code src/test/java}), builds a test app, and - executes it locally using the default test runner class. Android Studio then - displays the results in the Run window. -

    - -

    - Run Instrumented Tests -

    - -

    - To run your instrumented tests: -

    +

    In your JUnit 4 test class, you can call out sections in your test code for +special processing by using the following annotations:

      - +
    • @Before: Use this annotation to specify a block of code that +contains test setup operations. The test class invokes this code block before +each test. You can have multiple @Before methods but the order in +which the test class calls these methods is not guaranteed.
    • -
    • In the Project window, navigate to your instrumented test class - or method, then right-click and run it using the Android Test configuration. - To run all tests in the instrumented test directory, right-click the - directory and select Run tests . -
    • +
    • @After: This annotation specifies a block of code that +contains test tear-down operations. The test class calls this code block after +every test method. You can define multiple @After operations in +your test code. Use this annotation to release any resources from memory.
    • + +
    • @Test: Use this annotation to mark a test method. A single +test class can contain multiple test methods, each prefixed with this +annotation.
    • + +
    • @Rule: Rules allow you to flexibly add or redefine the +behavior of each test method in a reusable way. In Android testing, use this +annotation together with one of the test rule classes that the Android Testing +Support Library provides, such as ActivityTestRule +or ServiceTestRule.
    • + +
    • @BeforeClass: Use this annotation to specify static methods +for each test class to invoke only once. This testing step is useful for +expensive operations such as connecting to a database.
    • + +
    • @AfterClass: Use this annotation to specify static methods for +the test class to invoke only after all tests in the class have run. This +testing step is useful for releasing any resources allocated in the +@BeforeClass block.
    • + +
    • @Test(timeout=): Some annotations support the ability to pass +in elements for which you can set values. For example, you can specify a +timeout period for the test. If the test starts but does not complete within +the given timeout period, it automatically fails. You must specify the timeout +period in milliseconds, for example: @Test(timeout=5000).
    -

    - The Android Plugin - for Gradle compiles the instrumented test code located in the default - directory ({@code src/androidTest/java}), builds a test APK and production - APK, installs both APKs on the connected device or emulator, and runs the - tests. Android Studio then displays the results of the instrumented test execution in the - Run window. +

    For more annotations, see the documentation for JUnit annotations and the Android +annotations.

    + +

    Use the JUnit Assert class to verify the +correctness of an object's state. The assert methods compare values you expect +from a test to the actual results and throw an exception if the comparison +fails. Assertion classes describes these +methods in more detail.

    + + +

    Android Testing Support Library

    + +

    The Android +Testing Support Library provides a set of APIs that allow you +to quickly build and run test code for your apps, including JUnit 4 and +functional UI tests. The library includes the following instrumentation-based +APIs that are useful when you want to automate your tests:

    + +
    AndroidJUnitRunner
    +
    A JUnit 4-compatible test runner for Android.
    + +
    Espresso
    +
    A UI testing framework; suitable for functional UI testing within an +app.
    + +
    UI Automator
    +
    A UI testing framework suitable for cross-app functional UI testing between +both system and installed apps.
    + + +

    Assertion classes

    + +

    Because Android Testing Support Library APIs extend JUnit, you can use +assertion methods to display the results of tests. An assertion method compares +an actual value returned by a test to an expected value, and throws an +AssertionException if the comparison test fails. Using assertions is more +convenient than logging, and provides better test performance.

    + +

    To simplify test development, you should use the Hamcrest library, which +lets you create more flexible tests using the Hamcrest matcher APIs.

    + + + +

    Monkey and monkeyrunner

    + +

    The Android SDK includes two tools for functional-level app testing:

    + +
    +
    Monkey
    +
    This is a command-line tool that sends pseudo-random streams of keystrokes, +touches, and gestures to a device. You run it with the Android Debug Bridge (adb) tool, and use it +to stress-test your app, report back errors any that are encountered, or repeat +a stream of events by running the tool multiple times with the same random +number seed.
    + + +
    monkeyrunner
    +
    This tool is an API and execution environment for test programs written in +Python. The API includes functions for connecting to a device, installing and +uninstalling packages, taking screenshots, comparing two images, and running a +test package against an app. Using the API, you can write a wide range of +large, powerful, and complex tests. You run programs that use the API with the +monkeyrunner command-line tool.
    +
    + + + + +

    Guides for Building Android Tests

    + +

    The following documents provide more detail about how to build and run +a variety of test types:

    -

    Run Instrumented Tests with Cloud Test Lab

    - -

    - Using Cloud Test - Lab, you can simultaneously test your app on many popular Android - devices, across multiple languages, screen orientations, and versions of the - Android platform. These tests run on actual physical devices in remote Google - data centers. You can also configure - your instrumented tests to take screenshots while Cloud Test Lab runs its - tests. You can deploy tests to - Cloud Test Lab from the command line, or from Android Studio's integrated - testing tools. -

    - -

    - Android Studio allows you to connect to your Google Cloud Platform account, - configure your tests, deploy them to Cloud Test Lab, and analyze the results - all within the development environment. Cloud Test Lab in Android Studio - supports the following Android test frameworks: Espresso, - UI - Automator 2.0, or Robotium. Test results provide - test logs and include the details of any app failures. -

    - -

    - Before you can start using Cloud Test Lab, you need to: -

    - -
      -
    1. - Create a - Google Cloud Platform account to use with active billing. -
    2. - -
    3. - Create a Google - Cloud project for your app. -
    4. - -
    5. - Set up an active - billing account and associate it with the project you just created. -
    6. -
    - - -

    -Configure a test matrix and run a test -

    - -

    - Android Studio provides integrated tools that allow you to configure how you - want to deploy your tests to Cloud Test Lab. After you have created a Google - Cloud project with active billing, you can create a test configuration and - run your tests: -

    - -
      -
    1. Click Run > Edit Configurations from - the main menu. -
    2. - -
    3. Click Add New Configuration (+) and select - Android Tests. -
    4. - -
    5. In the Android Test configuration dialog: -
        -
      1. Enter or select the details of your test, such as the test name, module - type, test type, and test class. -
      2. - -
      3. From the Target drop-down menu under Deployment Target - Options, select Cloud Test Lab Device Matrix. -
      4. - -
      5. If you are not logged in, click Connect to Google Cloud - Platform and allow Android Studio access to your account. -
      6. - -
      7. Next to Cloud Project, click the wrench and nut button and select your Google Cloud - Platform project from the list. -
      8. -
      -
    6. - -
    7. Create and configure a test matrix: -
        -
      1. Next to the Matrix Configuration drop-down list, click - Open Dialog ellipses button. -
      2. - -
      3. Click Add New Configuration (+). -
      4. - -
      5. In the Name field, enter a name for your new - configuration. -
      6. - -
      7. Select the device(s), Android version(s), locale(s) and screen - orientation(s) that you want to test your app with. Cloud Test Lab will test - your app against every combination of your selections when generating test - results. -
      8. - -
      9. Click OK to save your configuration. -
      10. -
      -
    8. - -
    9. Click OK in the Run/Debug Configurations dialog - to exit. -
    10. - -
    11. Run your tests by clicking Run . -
    12. -
    - - -

    - Figure 1. Creating a test configuration for Cloud Test - Lab. -

    - -

    - Analyzing test results -

    - -

    - When Cloud Test Lab completes running your tests, the Run window will - open to show the results, as shown in figure 2. You may need to click - Show Passed - to see all your executed tests. -

    - - - -

    - Figure 2. Viewing the results of instrumented tests using - Cloud Test Lab. -

    - -

    - You can also analyze your tests on the web by following the link displayed at - the beginning of the test execution log in the Run window, as shown - in figure 3. -

    - - - -

    - Figure 3. Click the link to view detailed test results on - the web. -

    - -

    - To learn more about interpreting web results, see Analyzing - Cloud Test Lab Web Results. -

    \ No newline at end of file +
    +
    Building Local Unit Tests
    +
    Build unit tests that have no dependencies or only simple dependencies + that you can mock, which run on your local JVM.
    +
    Building Instrumented Unit Tests
    +
    Build complex unit tests with + Android dependencies that cannot be satisfied with mock objects, + which run on a hardware device or emulator.
    +
    Automating User + Interface Tests
    +
    Create tests to verify that the user interface + behaves correctly for user interactions within a single app or for + interactions across multiple apps.
    +
    Testing App + Compontent Integrations
    +
    Verify the behavior of components that + users do not directly interact with, such as a service or a content + provider.
    +
    Testing Display + Performance
    +
    Write tests that measure your app's UI performance to ensure + a consistently smooth user experience.
    +
    \ No newline at end of file diff --git a/docs/html/training/testing/unit-testing/instrumented-unit-tests.jd b/docs/html/training/testing/unit-testing/instrumented-unit-tests.jd index 38321eed93b30..f65766d825a9b 100644 --- a/docs/html/training/testing/unit-testing/instrumented-unit-tests.jd +++ b/docs/html/training/testing/unit-testing/instrumented-unit-tests.jd @@ -7,21 +7,20 @@ trainingnavtop=true
    -

    Dependencies and Prerequisites

    - - -

    This lesson teaches you to

    1. Set Up Your Testing Environment
    2. -
    3. Create a Instrumented Unit Test Class
    4. -
    5. Run Instrumented Unit Tests
    6. +
    7. Create a Instrumented Unit Test Class +
        +
      1. Create a test suite
      2. +
      +
    8. +
    9. Run Instrumented Unit Tests +
        +
      1. Run your tests with Firebase Test Lab
      2. +
      +

    Try it out

    @@ -36,25 +35,88 @@ class="external-link">Unit and UI Testing in Android Studio (codelab)
-

-Instrumented unit tests are unit tests that run on physical devices and emulators, instead of -the Java Virtual Machine (JVM) on your local machine. You should create instrumented unit tests -if your tests need access to instrumentation information (such as the target app's -{@link android.content.Context}) or if they require the real implementation of an Android framework -component (such as a {@link android.os.Parcelable} or {@link android.content.SharedPreferences} -object). Using instrumented unit tests also helps to reduce the effort required to write and -maintain mock code. You are still free to use a mocking framework, if you choose, to simulate any -dependency relationships. Instrumented unit tests can take advantage of the Android framework APIs -and supporting APIs, such as the Android Testing Support Library. -

+

Instrumented unit tests are tests that run on physical devices and +emulators, and they can take advantage of the Android framework APIs and +supporting APIs, such as the Android Testing Support Library. You should create +instrumented unit tests if your tests need access to instrumentation +information (such as the target app's {@link android.content.Context}) or if +they require the real implementation of an Android framework component (such as +a {@link android.os.Parcelable} or {@link android.content.SharedPreferences} +object).

+ +

Using instrumented unit tests also helps to reduce the effort required to +write and maintain mock code. You are still free to use a mocking framework, if +you choose, to simulate any dependency relationships.

+

Set Up Your Testing Environment

-

Before building your instrumented unit test, make sure to configure your test source code -location and project dependencies, as described in - -Getting Started with Testing.

+ +

In your Android Studio project, you must store the source files for +instrumented tests at +module-name/src/androidTests/java/. This directory +already exists when you create a new project.

+ +

Before you begin, you should + download + the Android Testing Support Library Setup, which provides APIs that allow + you to quickly build and run instrumented test code for your apps. The + Testing Support Library includes a JUnit 4 test runner (AndroidJUnitRunner + ) and APIs for functional UI tests (Espresso + and UI + Automator). +

+ +

You also need to configure the Android testing dependencies for your project +to use the test runner and the rules APIs provided by the Testing Support +Library. To simplify your test development, you should also include the +Hamcrest +library, which lets you create more flexible assertions using the Hamcrest +matcher APIs.

+ +

+ In your app's top-level {@code build.gradle} file, you need to specify these + libraries as dependencies: +

+ +
+dependencies {
+    androidTestCompile 'com.android.support:support-annotations:24.0.0'
+    androidTestCompile 'com.android.support.test:runner:0.5'
+    androidTestCompile 'com.android.support.test:rules:0.5'
+    // Optional -- Hamcrest library
+    androidTestCompile 'org.hamcrest:hamcrest-library:1.3'
+    // Optional -- UI testing with Espresso
+    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
+    // Optional -- UI testing with UI Automator
+    androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2'
+}
+
+ + +

+ To use JUnit 4 test classes, make sure to specify {@code + AndroidJUnitRunner} as the default test instrumentation runner in your + project by including the following setting in your app's module-level {@code build.gradle} + file: +

+ +
+android {
+    defaultConfig {
+        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+    }
+}
+
+ + +

Create an Instrumented Unit Test Class

+

Your instrumented unit test class should be written as a JUnit 4 test class. To learn more about creating JUnit 4 test classes and using JUnit 4 assertions and annotations, see @@ -119,7 +181,7 @@ public class LogHistoryAndroidUnitTest { } -

Creating a test suite

+

Create a test suite

To organize the execution of your instrumented unit tests, you can group a collection of test classes in a test suite class and run these tests together. Test suites can be nested; @@ -162,9 +224,198 @@ import org.junit.runners.Suite; public class UnitTestSuite {} +

Run Instrumented Unit Tests

+ +

To run your instrumented tests, follow these steps:

+ +
    +
  1. Be sure your project is synchronized with Gradle by clicking + Sync Project in the toolbar.
  2. + +
  3. Run your test in one of the following ways: +
      +
    • To run a single test, open the Project window, and then + right-click a test and click Run .
    • +
    • To test all methods in a class, right-click a class or method in the +test file and click Run . +
    • To run all tests in a directory, right-click on the + directory and select Run tests . +
    • +
    +
  4. + +
+

-To run your test, follow the steps for running instrumented tests -described in -Getting Started with Testing. + The Android Plugin + for Gradle compiles the instrumented test code located in the default + directory ({@code src/androidTest/java/}), builds a test APK and production + APK, installs both APKs on the connected device or emulator, and runs the + tests. Android Studio then displays the results of the instrumented test execution in the + Run window. +

+ +

+ Note: While running or debugging instrumented tests, + Android Studio does not inject the additional methods required for Instant Run + and turns the feature off. +

+ + +

Run your tests with Firebase Test Lab

+ +

Using Firebase Test +Lab, you can simultaneously test your app on many popular Android devices +and configurations such as locale, orientation, screen size, and platform +version. These tests run on actual physical devices in remote Google data +centers. You can deploy to Firebase Test Lab directly from Android Studio or +from the command line. Test results provide test logs and include the details +of any app failures.

+ +

+ Before you can start using Firebase Test Lab, you need to: +

+ +
    +
  1. + Create a + Google Cloud Platform account to use with active billing. +
  2. + +
  3. + Create a Google + Cloud project for your app. +
  4. + +
  5. + Set up an active + billing account and associate it with the project you just created. +
  6. +
+ + +

+Configure a test matrix and run a test +

+ +

+ Android Studio provides integrated tools that allow you to configure how you + want to deploy your tests to Firebase Test Lab. After you have created a Google + Cloud project with active billing, you can create a test configuration and + run your tests: +

+ +
    +
  1. Click Run > Edit Configurations from + the main menu. +
  2. + +
  3. Click Add New Configuration (+) and select + Android Tests. +
  4. + +
  5. In the Android Test configuration dialog: +
      +
    1. Enter or select the details of your test, such as the test name, module + type, test type, and test class. +
    2. + +
    3. From the Target drop-down menu under Deployment Target + Options, select Cloud Test Lab Device Matrix. +
    4. + +
    5. If you are not logged in, click Connect to Google Cloud + Platform and allow Android Studio access to your account. +
    6. + +
    7. Next to Cloud Project, click the wrench and nut button and select your Google Cloud + Platform project from the list. +
    8. +
    +
  6. + +
  7. Create and configure a test matrix: +
      +
    1. Next to the Matrix Configuration drop-down list, click + Open Dialog ellipses button. +
    2. + +
    3. Click Add New Configuration (+). +
    4. + +
    5. In the Name field, enter a name for your new + configuration. +
    6. + +
    7. Select the device(s), Android version(s), locale(s) and screen + orientation(s) that you want to test your app with. Firebase Test Lab will + test your app against every combination of your selections when generating + test results. +
    8. + +
    9. Click OK to save your configuration. +
    10. +
    +
  8. + +
  9. Click OK in the Run/Debug Configurations dialog + to exit. +
  10. + +
  11. Run your tests by clicking Run . +
  12. +
+ + +

+ Figure 1. Creating a test configuration for Firebase Test + Lab. +

+ +

+ Analyzing test results +

+ +

+ When Firebase Test Lab completes running your tests, the Run window + will open to show the results, as shown in figure 2. You may need to click + Show Passed + to see all your executed tests. +

+ + + +

+ Figure 2. Viewing the results of instrumented tests using + Firebase Test Lab. +

+ +

+ You can also analyze your tests on the web by following the link displayed at + the beginning of the test execution log in the Run window, as shown + in figure 3. +

+ + + +

+ Figure 3. Click the link to view detailed test results on + the web. +

+ +

+ To learn more about interpreting web results, see Analyze + Firebase Test Lab for Android Results.

\ No newline at end of file diff --git a/docs/html/training/testing/unit-testing/local-unit-tests.jd b/docs/html/training/testing/unit-testing/local-unit-tests.jd index 893d957fcc41c..25b62fa2e3932 100644 --- a/docs/html/training/testing/unit-testing/local-unit-tests.jd +++ b/docs/html/training/testing/unit-testing/local-unit-tests.jd @@ -7,17 +7,16 @@ trainingnavtop=true
-

Dependencies and Prerequisites

- -

This lesson teaches you to

  1. Set Up Your Testing Environment
  2. -
  3. Create a Local Unit Test Class
  4. +
  5. Create a Local Unit Test Class +
      +
    1. Mock Android dependencies
    2. +
    +
  6. Run Local Unit Tests
@@ -42,13 +41,35 @@ test is greatly reduced. With this approach, you normally use a mocking framewor dependency relationships.

Set Up Your Testing Environment

-

Before building your local unit test, make sure to configure your test source code location and -project dependencies, as described in - -Getting Started with Testing.

+ +

In your Android Studio project, you must store the source files for local +unit tests at module-name/src/test/java/. This directory +already exists when you create a new project.

+ +

You also need to configure the testing dependencies for your project to use +the standard APIs provided by the JUnit 4 framework. If your test needs to +interact with Android dependencies, include the Mockito library +to simplify your local unit tests. To learn more about using mock objects in +your local unit tests, see +Mocking Android dependencies.

+ +

In your app's top-level {@code build.gradle} file, you need to specify these +libraries as dependencies:

+ +
+dependencies {
+    // Required -- JUnit 4 framework
+    testCompile 'junit:junit:4.12'
+    // Optional -- Mockito framework
+    testCompile 'org.mockito:mockito-core:1.10.19'
+}
+

Create a Local Unit Test Class

+

Your local unit test class should be written as a JUnit 4 test class. JUnit is the most popular and widely-used unit testing framework for Java. The latest version of this framework, JUnit 4, @@ -90,7 +111,7 @@ can use Hamcrest matchers (such as the {@code is()} and {@code equalTo()} methods) to match the returned result against the expected result.

-

Mocking Android dependencies

+

Mock Android dependencies

By default, the Android Plug-in for Gradle executes your local unit tests against a modified @@ -174,10 +195,37 @@ class="external-link">Mockito API reference and the class="external-link">sample code.

-

Run Local Unit Tests

-

-To run your tests, follow the steps for running local unit tests -described in -Getting Started with Testing. -

+

Run Local Unit Tests

+ +

To run your local unit tests, follow these steps:

+ +
    + +
  1. Be sure your project is synchronized with Gradle by clicking + Sync Project in the toolbar.
  2. + +
  3. Run your test in one of the following ways: +
      +
    • To run a single test, open the Project window, and then + right-click a test and click Run .
    • +
    • To test all methods in a class, right-click a class or method in the +test file and click Run . +
    • To run all tests in a directory, right-click on the + directory and select Run tests . +
    • +
    +
  4. + +
+ +

+ The Android Plugin for Gradle compiles the local unit test code located in + the default directory ({@code src/test/java/}), builds a test app, and + executes it locally using the default test runner class. Android Studio then + displays the results in the Run window. +