קל לארגן דפים בעזרת אוספים
אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.
אם אתם מטמיעים Service מקומי כרכיב באפליקציה, עליכם
יכול ליצור בדיקות אינסטרומנטליות כדי לאמת שאופן הפעולה שלו נכון.
בדיקת AndroidX מספקת API לבדיקת האובייקטים של Service ב-
של טרנספורמר. המחלקה ServiceTestRule היא כלל JUnit 4 שמתחיל את
לפני שהשיטות של בדיקת היחידה מופעלות, ומכבה את השירות לאחר מכן
הבדיקות הושלמו. למידע נוסף על כללי JUnit 4, ראו JUnit
תיעוד.
הגדרת סביבת הבדיקה
לפני שיוצרים את בדיקת השילוב של השירות, חשוב להגדיר
את הפרויקט שלכם לבדיקות אינסטרומנטליות, כפי שמתואר במאמר הגדרת פרויקט עבור
בדיקת AndroidX.
יצירת בדיקת שילוב לשירותים
צריך לכתוב את בדיקת השילוב ככיתת בדיקה של JUnit 4. מידע נוסף
על יצירת מחלקות בדיקה ב-JUnit 4 ושימוש בשיטות טענת נכוֹנוּת (assertion) של JUnit 4 תוכלו לקרוא
יוצרים כיתת בדיקה עם אינסטרומנטציה.
יוצרים מופע ServiceTestRule בבדיקה באמצעות הפקודה @Rule
הערה.
הדוגמה הבאה ממחישה איך אפשר ליישם בדיקת אינטגרציה של
לאחר השיפור. שיטת הבדיקה testWithBoundService() מאמתת שהאפליקציה מקשרת
בהצלחה בשירות מקומי, וממשק השירות יפעל בצורה תקינה.
בצורה נכונה.
Kotlin
@Test@Throws(TimeoutException::class)funtestWithBoundService(){// Create the service Intent.valserviceIntent=Intent(ApplicationProvider.getApplicationContext<Context>(),LocalService::class.java).apply{// Data can be passed to the service via the Intent.putExtra(SEED_KEY,42L)}// Bind the service and grab a reference to the binder.valbinder:IBinder=serviceRule.bindService(serviceIntent)// Get the reference to the service, or you can call// public methods on the binder directly.valservice:LocalService=(binderasLocalService.LocalBinder).getService()// Verify that the service is working correctly.assertThat(service.getRandomInt(),`is`(any(Int::class.java)))}
Java
@TestpublicvoidtestWithBoundService()throwsTimeoutException{// Create the service Intent.IntentserviceIntent=newIntent(ApplicationProvider.getApplicationContext(),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.IBinderbinder=serviceRule.bindService(serviceIntent);// Get the reference to the service, or you can call// public methods on the binder directly.LocalServiceservice=((LocalService.LocalBinder)binder).getService();// Verify that the service is working correctly.assertThat(service.getRandomInt()).isAssignableTo(Integer.class);}
מקורות מידע נוספים
כדי לקבל מידע נוסף בנושא, אפשר לעיין במקורות המידע הנוספים הבאים.
דוגמאות התוכן והקוד שבדף הזה כפופות לרישיונות המפורטים בקטע רישיון לתוכן. Java ו-OpenJDK הם סימנים מסחריים או סימנים מסחריים רשומים של חברת Oracle ו/או של השותפים העצמאיים שלה.
עדכון אחרון: 2025-07-27 (שעון UTC).
[[["התוכן קל להבנה","easyToUnderstand","thumb-up"],["התוכן עזר לי לפתור בעיה","solvedMyProblem","thumb-up"],["סיבה אחרת","otherUp","thumb-up"]],[["חסרים לי מידע או פרטים","missingTheInformationINeed","thumb-down"],["התוכן מורכב מדי או עם יותר מדי שלבים","tooComplicatedTooManySteps","thumb-down"],["התוכן לא עדכני","outOfDate","thumb-down"],["בעיה בתרגום","translationIssue","thumb-down"],["בעיה בדוגמאות/בקוד","samplesCodeIssue","thumb-down"],["סיבה אחרת","otherDown","thumb-down"]],["עדכון אחרון: 2025-07-27 (שעון UTC)."],[],[],null,["# Test your service\n\nIf you are implementing a local [`Service`](/reference/android/app/Service) as a component of your app, you\ncan create [instrumented tests](/training/testing/unit-testing/instrumented-unit-tests) to verify that its behavior is correct.\n\n[AndroidX Test](/training/testing) provides an API for testing your `Service` objects in\nisolation. The [`ServiceTestRule`](/reference/androidx/test/rule/ServiceTestRule) class is a JUnit 4 rule that starts your\nservice before your unit test methods run, and shuts down the service after\ntests complete. To learn more about JUnit 4 rules, see the [JUnit\ndocumentation](https://github.com/junit-team/junit/wiki/Rules).\n| **Note:** The `ServiceTestRule` class does not support testing of [`IntentService`](/reference/android/app/IntentService) objects. If you need to test an `IntentService` object, you should encapsulate the logic in a separate class and create a corresponding unit test instead.\n\nSet up your testing environment\n-------------------------------\n\nBefore building your integration test for the service, make sure to configure\nyour project for instrumented tests, as described in [Set up project for\nAndroidX Test](/training/testing/set-up-project).\n\nCreate an integration test for services\n---------------------------------------\n\nYour integration test should be written as a JUnit 4 test class. To learn more\nabout creating JUnit 4 test classes and using JUnit 4 assertion methods, see\n[Create an instrumented test class](/training/testing/unit-testing/instrumented-unit-tests#create-instrumented).\n\nCreate a `ServiceTestRule` instance in your test by using the `@Rule`\nannotation. \n\n### Kotlin\n\n```kotlin\n@get:Rule\nval serviceRule = ServiceTestRule()\n```\n\n### Java\n\n```java\n@Rule\npublic final ServiceTestRule serviceRule = new ServiceTestRule();\n```\n\nThe following example shows how you might implement an integration test for a\nservice. The test method `testWithBoundService()` verifies that the app binds\nsuccessfully to a local service and that the service interface behaves\ncorrectly. \n\n### Kotlin\n\n```kotlin\n@Test\n@Throws(TimeoutException::class)\nfun testWithBoundService() {\n // Create the service Intent.\n val serviceIntent = Intent(\n ApplicationProvider.getApplicationContext\u003cContext\u003e(),\n LocalService::class.java\n ).apply {\n // Data can be passed to the service via the Intent.\n putExtra(SEED_KEY, 42L)\n }\n\n // Bind the service and grab a reference to the binder.\n val binder: IBinder = serviceRule.bindService(serviceIntent)\n\n // Get the reference to the service, or you can call\n // public methods on the binder directly.\n val service: LocalService = (binder as LocalService.LocalBinder).getService()\n\n // Verify that the service is working correctly.\n assertThat(service.getRandomInt(), `is`(any(Int::class.java)))\n}\n```\n\n### Java\n\n```java\n@Test\npublic void testWithBoundService() throws TimeoutException {\n // Create the service Intent.\n Intent serviceIntent =\n new Intent(ApplicationProvider.getApplicationContext(),\n LocalService.class);\n\n // Data can be passed to the service via the Intent.\n serviceIntent.putExtra(LocalService.SEED_KEY, 42L);\n\n // Bind the service and grab a reference to the binder.\n IBinder binder = serviceRule.bindService(serviceIntent);\n\n // Get the reference to the service, or you can call\n // public methods on the binder directly.\n LocalService service =\n ((LocalService.LocalBinder) binder).getService();\n\n // Verify that the service is working correctly.\n assertThat(service.getRandomInt()).isAssignableTo(Integer.class);\n}\n```\n\nAdditional resources\n--------------------\n\nTo learn more about this topic, consult the following additional resources.\n\n### Samples\n\n- [Service Test Code Samples](https://github.com/android/testing-samples/tree/main/integration/ServiceTestRuleSample)"]]