Я создал класс для тестирования Service
, который использует ServiceTestRule
. Я получаю исключение, когда пытаюсь получить объект системной службы с помощью context.getSystemService(Context.SYSTEM_SERVICE_NAME)
.
StackTrace исключения:
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
at android.os.Handler.<init>(Handler.java:200)
at android.os.Handler.<init>(Handler.java:114)
at android.content.ClipboardManager$2.<init>(ClipboardManager.java:69)
at android.content.ClipboardManager.<init>(ClipboardManager.java:69)
at android.app.ContextImpl$11.createService(ContextImpl.java:405)
at android.app.ContextImpl$ServiceFetcher.getService(ContextImpl.java:297)
at android.app.ContextImpl.getSystemService(ContextImpl.java:1832)
at android.view.ContextThemeWrapper.getSystemService(ContextThemeWrapper.java:113)
at android.app.Activity.getSystemService(Activity.java:5003)
Тестовый класс:
@RunWith(AndroidJUnit4.class)
public class ClipboardServiceTest {
private static final String ANY_LABEL = "Android";
private static final String ANY_TEXT = "Android test rules";
private Context context = InstrumentationRegistry.getTargetContext();
@Rule
public ServiceTestRule serviceTestRule = new ServiceTestRule();
@Before
public void setUp() throws TimeoutException {
serviceTestRule.startService(new Intent(InstrumentationRegistry.getContext(), ClipboardService.class));
}
@Test
public void shouldShowClipboardViewOnCopyText() {
ClipboardManager clipboard = (ClipboardManager) context
.getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText(ANY_LABEL, ANY_LABEL);
clipboard.setPrimaryClip(clip);
onView(withText(ANY_TEXT)).check(matches(isDisplayed()));
}
}
Как я могу получить системные сервисные объекты (менеджеры)?