我已经扩展了InputMethodService
课程以创建我的自定义 IME。但是,我正在努力编写有效的 Instrumentation 测试用例来验证行为。以前Service
, 可以使用ServiceTestCase<YourServiceClass>
. 但它似乎已被弃用,新格式看起来像这样。现在在给定的指导方针中,我正在努力处理这个片段:
CustomKeyboardService service =
((CustomKeyboardService.LocalBinder) binder).getService();
由于我正在扩展InputMethodService
,它已经抽象了IBinder
,我怎样才能获得LocalBinder
让这个片段运行?目前,此代码段引发以下异常:
java.lang.ClassCastException: android.inputmethodservice.IInputMethodWrapper 无法转换为 com.osrc.zdar.customkeyboard.CustomKeyboardService$LocalBinder
扩展类如下所示:
public class CustomKeyboardService extends InputMethodService {
// Some keyboard related stuff
public class LocalBinder extends Binder {
public CustomKeyboardService getService() {
// Return this instance of LocalService so clients can call public methods.
return CustomKeyboardService.this;
}
}
// Some keyboard related stuff
}
如何扩展我的自定义类以使其CustomKeyboardService service
= ((CustomKeyboardService.LocalBinder) binder).getService();
不返回错误?
这是我的测试用例代码:
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest2 {
@Rule
public final ServiceTestRule mServiceRule = new ServiceTestRule();
@Test
public void testWithBoundService() throws TimeoutException {
// Create the service Intent.
Intent serviceIntent =
new Intent(InstrumentationRegistry.getTargetContext(), CustomKeyboardService.class);
// 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.
// This Line throws the error
CustomKeyboardService service =
((CustomKeyboardService.LocalBinder) binder).getService();
}
}
您还可以在 Github 上查看OimeKeyboard以获取完整的源代码,并使用有效的仪器测试用例提交 PR。