page.title=Content Provider Testing
parent.title=Testing
parent.link=index.html
@jd:body

<div id="qv-wrapper">
  <div id="qv">
  <h2>In this document</h2>
  <ol>
    <li>
        <a href="#DesignAndTest">Content Provider Design and Testing</a>
    </li>
    <li>
      <a href="#ContentProviderTestAPI">The Content Provider Testing API</a>
      <ol>
        <li>
          <a href="#ProviderTestCase2">ProviderTestCase2 </a>
        </li>
        <li>
          <a href="#MockObjects">Mock object classes</a>
        </li>
      </ol>
    </li>
    <li>
        <a href="#WhatToTest">What To Test</a>
    </li>
    <li>
        <a href="#NextSteps">Next Steps</a>
    </li>
  </ol>
  <h2>Key Classes</h2>
    <ol>
      <li>{@link android.test.InstrumentationTestRunner}</li>
      <li>{@link android.test.ProviderTestCase2}</li>
      <li>{@link android.test.IsolatedContext}</li>
      <li>{@link android.test.mock.MockContentResolver}</li>
    </ol>
  <h2>Related Tutorials</h2>
    <ol>
        <li>
            <a href="{@docRoot}tools/testing/activity_test.html">Activity Testing Tutorial</a>
        </li>
    </ol>
  <h2>See Also</h2>
      <ol>
        <li>
          <a
          href="{@docRoot}tools/testing/testing_android.html">
          Testing Fundamentals</a>
        </li>
        <li>
          <a href="{@docRoot}tools/testing/testing_eclipse.html">
          Testing From Eclipse with ADT</a>
        </li>
        <li>
          <a href="{@docRoot}tools/testing/testing_otheride.html">
          Testing From Other IDEs</a>
        </li>
      </ol>
  </div>
</div>
<p>
    Content providers, which store and retrieve data and make it accessible across applications,
    are a key part of the Android API. As an application developer you're allowed to provide your
    own public providers for use by other applications. If you do, then you should test them
    using the API you publish.
</p>
<p>
    This document describes how to test public content providers, although the information is
    also applicable to providers that you keep private to your own application. If you aren't
    familiar with content  providers or the Android testing framework, please read
    <a href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a>,
    the guide to developing content providers, and
    <a href="{@docRoot}tools/testing/testing_android.html">Testing Fundamentals</a>,
    the introduction to the Android testing and instrumentation framework.
</p>
<h2 id="DesignAndTest">Content Provider Design and Testing</h2>
<p>
    In Android, content providers are viewed externally as data APIs that provide
    tables of data, with their internals hidden from view. A content provider may have many
    public constants, but it usually has few if any public methods and no public variables.
    This suggests that you should write your tests based only on the provider's public members.
    A content provider that is designed like this is offering a contract between itself and its
    users.
</p>
<p>
    The base test case class for content providers,
    {@link android.test.ProviderTestCase2}, allows you to test your content provider in an
    isolated environment. Android mock objects such as {@link android.test.IsolatedContext} and
    {@link android.test.mock.MockContentResolver} also help provide an isolated test environment.
</p>
<p>
    As with other Android tests, provider test packages are run under the control of the test
    runner {@link android.test.InstrumentationTestRunner}. The section
    <a href="{@docRoot}tools/testing/testing_android.html#InstrumentationTestRunner">
    Running Tests With InstrumentationTestRunner</a> describes the test runner in
    more detail. The topic <a href="{@docRoot}tools/testing/testing_eclipse.html">
    Testing From Eclipse with ADT</a> shows you how to run a test package in Eclipse, and the
    topic <a href="{@docRoot}tools/testing/testing_otheride.html">
    Testing From Other IDEs</a>
    shows you how to run a test package from the command line.
</p>
<h2 id="ContentProviderTestAPI">Content Provider Testing API</h2>
<p>
    The main focus of the provider testing API is to provide an isolated testing environment. This
    ensures that tests always run against data dependencies set explicitly in the test case. It
    also prevents tests from modifying actual user data. For example, you want to avoid writing
    a test that fails because there was data left over from a previous test, and you want to
    avoid adding or deleting contact information in a actual provider.
</p>
<p>
    The test case class and mock object classes for provider testing set up this isolated testing
    environment for you.
</p>
<h3 id="ProviderTestCase2">ProviderTestCase2</h3>
<p>
    You test a provider with a subclass of {@link android.test.ProviderTestCase2}. This base class
    extends {@link android.test.AndroidTestCase}, so it provides the JUnit testing framework as well
    as Android-specific methods for testing application permissions. The most important
    feature of this class is its initialization, which creates the isolated test environment.
</p>
<p>
    The initialization is done in the constructor for {@link android.test.ProviderTestCase2}, which
    subclasses call in their own constructors. The {@link android.test.ProviderTestCase2}
    constructor creates an {@link android.test.IsolatedContext} object that allows file and
    database operations but stubs out other interactions with the Android system.
    The file and database operations themselves take place in a directory that is local to the
    device or emulator and has a special prefix.
</p>
<p>
    The constructor then creates a {@link android.test.mock.MockContentResolver} to use as the
    resolver for the test. The {@link android.test.mock.MockContentResolver} class is described in
    detail in the section
    <a href="{@docRoot}tools/testing/testing_android.html#MockObjectClasses">Mock object
classes</a>.
</p>
<p>
    Lastly, the constructor creates an instance of the provider under test. This is a normal
    {@link android.content.ContentProvider} object, but it takes all of its environment information
    from the {@link android.test.IsolatedContext}, so it is restricted to
    working in the isolated test environment. All of the tests done in the test case class run
    against this isolated object.
</p>
<h3 id="MockObjects">Mock object classes</h3>
<p>
    {@link android.test.ProviderTestCase2} uses {@link android.test.IsolatedContext} and
    {@link android.test.mock.MockContentResolver}, which are standard mock object classes. To
    learn more about them, please read
    <a href="{@docRoot}tools/testing/testing_android.html#MockObjectClasses">
    Testing Fundamentals</a>.
</p>
<h2 id="WhatToTest">What To Test</h2>
<p>
    The topic <a href="{@docRoot}tools/testing/what_to_test.html">What To Test</a>
    lists general considerations for testing Android components.
    Here are some specific guidelines for testing content providers.
</p>
<ul>
    <li>
        Test with resolver methods: Even though you can instantiate a provider object in
        {@link android.test.ProviderTestCase2}, you should always test with a resolver object
        using the appropriate URI. This ensures that you are testing the provider using the same
        interaction that a regular application would use.
    </li>
    <li>
        Test a public provider as a contract: If you intent your provider to be public and
        available to other applications, you should test it as a contract. This includes
        the following ideas:
        <ul>
            <li>
                Test with constants that your provider publicly exposes. For
                example, look for constants that refer to column names in one of the provider's
                data tables. These should always be constants publicly defined by the provider.
            </li>
            <li>
                Test all the URIs offered by your provider. Your provider may offer several URIs,
                each one referring to a different aspect of the data. The
                <a href="{@docRoot}resources/samples/NotePad/index.html">Note Pad</a> sample,
                for example, features a provider that offers one URI for retrieving a list of notes,
                another for retrieving an individual note by it's database ID, and a third for
                displaying notes in a live folder.
            </li>
            <li>
                Test invalid URIs: Your unit tests should deliberately call the provider with an
                invalid URI, and look for errors. Good provider design is to throw an
                IllegalArgumentException for invalid URIs.

            </li>
        </ul>
    </li>
    <li>
        Test the standard provider interactions: Most providers offer six access methods:
        query, insert, delete, update, getType, and onCreate(). Your tests should verify that all
        of these methods work. These are described in more detail in the topic
        <a href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a>.
    </li>
    <li>
        Test business logic: Don't forget to test the business logic that your provider should
        enforce. Business logic includes handling of invalid values, financial or arithmetic
        calculations, elimination or combining of duplicates, and so forth. A content provider
        does not have to have business logic, because it may be implemented by activities that
        modify the data. If the provider does implement business logic, you should test it.
    </li>
</ul>
<h2 id="NextSteps">Next Steps</h2>
<p>
    To learn how to set up and run tests in Eclipse, please refer to 
<a href="{@docRoot}tools/testing/testing_eclipse.html">Testing from Eclipse with ADT</a>.
    If you're not working in Eclipse, refer to 
<a href="{@docRoot}tools/testing/testing_otheride.html">Testing From Other IDEs</a>.
</p>
<p>
    If you want a step-by-step introduction to testing activities, try the 
    <a href="{@docRoot}tools/testing/activity_test.html">Activity Testing Tutorial</a>, which
    guides you through a testing scenario that you develop against an activity-oriented application.
</p>

