У меня есть базовая реализация Android InputMethodService, для которой я пытаюсь написать модульные тесты. В моем приложении нет никаких действий, только реализация InputMethodService.
Пока у меня есть базовая реализация ServiceTestCase, которая отлично работает:
SoftKeyboardTest.java
public class SoftKeyboardTest extends ServiceTestCase<SoftKeyboard> {
@Override
protected void setUp() throws Exception {
super.setUp();
bindService(new Intent(this.getContext(), SoftKeyboard.class));
}
public void testShowKeyboard() {
this.getService().ShowKeyboard();
assertTrue(this.getService().GetKeyboardIsVisible());
}
public void testInsertText() {
String text = "Hello, world";
this.getService().InsertText(text);
assertEquals(this.getService().ReadText(text.length()), text);
}
}
Тем не менее, я хотел бы протестировать некоторые функции, которые вставляют текст в текущий EditText, используя getCurrentInputConnection():
SoftKeyboard.java
public void InsertText(String sentence) {
getCurrentInputConnection().commitText(sentence, 1);
}
public void ReadText(int chars) {
getCurrentInputConnection().getTextBeforeCursor(chars, 0);
}
Очевидно, в этом случае я получаю NullPointerException из-за того, что на самом деле нет никакого сфокусированного EditText.
Как я могу заставить свое тестовое приложение запустить мою службу, каким-то образом сфокусироваться на EditText, а затем запустить свои тестовые примеры, чтобы я мог правильно протестировать свои методы службы?