This undoes the automerger skip which occured in
commit e740c84dc3 and
replays it as a standard (NOT -s ours) merge.
Change-Id: If5a47be26f73d6a0735c425cd66310a3e2a89086
141 lines
5.7 KiB
Plaintext
141 lines
5.7 KiB
Plaintext
page.title=Testing Your Service
|
|
page.tags=testing, service
|
|
trainingnavtop=true
|
|
|
|
@jd:body
|
|
|
|
<!-- This is the training bar -->
|
|
<div id="tb-wrapper">
|
|
<div id="tb">
|
|
<h2>Dependencies and Prerequisites</h2>
|
|
|
|
<ul>
|
|
<li>Android 2.2 (API level 8) or higher</li>
|
|
<li><a href="{@docRoot}tools/testing-support-library/index.html">
|
|
Android Testing Support Library</a></li>
|
|
<li><a href="{@docRoot}tools/studio/index.html">Android Studio 1.4.1 or higher</a>.</li>
|
|
</ul>
|
|
|
|
<h2>This lesson teaches you to</h2>
|
|
|
|
<ol>
|
|
<li><a href="#setup">Set Up Your Testing Environment</a></li>
|
|
<li><a href="#build">Create an Integrated Test for Services</a></li>
|
|
<li><a href="#run">Run Integration Tests for Services</a></li>
|
|
</ol>
|
|
|
|
<h2>You should also read</h2>
|
|
<ul>
|
|
<li><a href="{@docRoot}guide/components/services.html">Services</a></li>
|
|
</ul>
|
|
|
|
<h2>Try it out</h2>
|
|
|
|
<ul>
|
|
<li>
|
|
<a href="https://github.com/googlesamples/android-testing/tree/master/integration/ServiceTestRuleSample"
|
|
class="external-link">Service Test Code Samples</a></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<p>
|
|
If you are implementing a local {@link android.app.Service} as a component of
|
|
your app, you should test the {@link android.app.Service} to ensure that it doesn't behave in an
|
|
unexpected way. You can create
|
|
<a href="{@docRoot}training/testing/unit-testing/instrumented-unit-tests.html">
|
|
instrumented unit tests</a> to verify that the behavior in the {@link android.app.Service}
|
|
is correct; for example, the service stores and returns valid data values and performs
|
|
data operations correctly.
|
|
</p>
|
|
|
|
<p>
|
|
The <a href="{@docRoot}tools/testing-support-library/index.html">Android Testing Support Library</a>
|
|
provides an API for testing your {@link android.app.Service} objects in isolation.
|
|
The
|
|
<a href="{@docRoot}reference/android/support/test/rule/ServiceTestRule.html">ServiceTestRule</a>
|
|
class is a JUnit 4 rule that starts your service before your unit test methods
|
|
run, and shuts down the service after tests complete. By using this test rule, you ensure that the
|
|
connection to the service is always established before your test method runs. To
|
|
learn more about JUnit 4 rules, see the <a href="https://github.com/junit-team/junit/wiki/Rules"
|
|
class="external-link">JUnit documentation</a>.
|
|
</p>
|
|
|
|
<p style="note">
|
|
<strong>Note</strong>: The
|
|
<a href="{@docRoot}reference/android/support/test/rule/ServiceTestRule.html">ServiceTestRule</a>
|
|
class does not support testing of {@link android.app.IntentService} objects.
|
|
If you need to test a {@link android.app.IntentService} object, you should encapsulate the logic
|
|
in a separate class and create a corresponding unit test instead.
|
|
</p>
|
|
|
|
<h2 id="setup">Set Up Your Testing Environment</h2>
|
|
<p>Before building your integration test for the service, make sure to configure your project for
|
|
instrumented tests, as described in
|
|
<a href="{@docRoot}training/testing/start/index.html#config-instrumented-tests">
|
|
Getting Started with Testing</a>.</p>
|
|
|
|
<h2 id="build">Create an Integration Test for Services</h2>
|
|
<p>Your integration test should be written as a JUnit 4 test class. To learn more about creating
|
|
JUnit 4 test classes and using JUnit 4 assertion methods, see
|
|
<a href="{@docRoot}training/testing/unit-testing/instrumented-unit-tests.html#build">
|
|
Create an Instrumented Unit Test Class</a>.</p>
|
|
|
|
<p>To create an integration test for your service, add the {@code @RunWith(AndroidJUnit4.class)}
|
|
annotation at the beginning of your test class definition. You also need to specify the
|
|
<a href="{@docRoot}reference/android/support/test/runner/AndroidJUnitRunner.html">
|
|
{@code AndroidJUnitRunner}</a> class that the Android Testing Support Library provides as your
|
|
default test runner. This step is described in more detail in
|
|
<a href="{@docRoot}training/testing/unit-testing/instrumented-unit-tests.html#run">
|
|
Run Instrumented Unit Tests</a>.</p>
|
|
|
|
<p>Next, create a
|
|
<a href="{@docRoot}reference/android/support/test/rule/ServiceTestRule.html">ServiceTestRule</a>
|
|
instance in your test by using the {@code @Rule} annotation.</p>
|
|
|
|
<pre>
|
|
@Rule
|
|
public final ServiceTestRule mServiceRule = new ServiceTestRule();
|
|
</pre>
|
|
|
|
<p>The following example shows how you might implement an integration test for a service.
|
|
The test method {@code testWithBoundService} verifies that the app binds successfully to a
|
|
local service and that the service interface behaves correctly.</p>
|
|
|
|
<pre>
|
|
@Test
|
|
public void testWithBoundService() throws TimeoutException {
|
|
// Create the service Intent.
|
|
Intent serviceIntent =
|
|
new Intent(InstrumentationRegistry.getTargetContext(),
|
|
LocalService.class);
|
|
|
|
// Data can be passed to the service via the Intent.
|
|
serviceIntent.putExtra(LocalService.SEED_KEY, 42L);
|
|
|
|
// Bind the service and grab a reference to the binder.
|
|
IBinder binder = mServiceRule.bindService(serviceIntent);
|
|
|
|
// Get the reference to the service, or you can call
|
|
// public methods on the binder directly.
|
|
LocalService service =
|
|
((LocalService.LocalBinder) binder).getService();
|
|
|
|
// Verify that the service is working correctly.
|
|
assertThat(service.getRandomInt(), is(any(Integer.class)));
|
|
}
|
|
</pre>
|
|
|
|
<h2 id="run">Run Integration Tests for Services</h2>
|
|
<p>
|
|
You can run integration tests from <a href="{@docRoot}sdk/index.html">Android Studio</a> or
|
|
from the command-line. Make sure to specify
|
|
<a href="{@docRoot}reference/android/support/test/runner/AndroidJUnitRunner.html">
|
|
{@code AndroidJUnitRunner}</a> as the default instrumentation runner in your project.
|
|
</p>
|
|
<p>
|
|
To run the integration test for your service, follow the steps for running instrumented tests
|
|
described in <a href="{@docRoot}training/testing/start/index.html#run-instrumented-tests">
|
|
Getting Started with Testing</a>.
|
|
</p>
|