- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我已经扩展了 InputMethodService
类来创建我的自定义 IME。但是,我正在努力编写有效的 Instrumentation 测试用例来验证行为。以前是 Service
, 可以使用 ServiceTestCase<YourServiceClass>
进行测试.但它似乎已被弃用,新格式看起来像 this .现在在给定的指导方针中,我正在努力处理这个 fragment :
CustomKeyboardService service =
((CustomKeyboardService.LocalBinder) binder).getService();
因为我要扩展 InputMethodService
, 它已经抽象出 IBinder
, 我怎样才能获得 LocalBinder
让这段代码运行?目前,此代码段抛出以下异常:
java.lang.ClassCastException: android.inputmethodservice.IInputMethodWrapper cannot be cast to 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();
}
}
您还可以查看 OimeKeyboard在 Github 上获取完整的源代码,并提交带有有效仪器测试用例的 PR。
最佳答案
同样的问题发生在我身上,请查看下面链接的解决方案。
更新了链接中的代码 fragment :
@Rule
public final ServiceTestRule mServiceRule = new ServiceTestRule();
private MyKeyboard retrieveMyKeyboardInstance(IBinder binder) {
try {
Class wrapperClass = Class.forName("android.inputmethodservice.IInputMethodWrapper");
Field mTargetField = wrapperClass.getDeclaredField("mTarget");
mTargetField.setAccessible(true);
WeakReference<MyKeyboard> weakReference = (WeakReference<MyKeyboard>) mTargetField.get(binder);
return weakReference.get();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public void validateEditTextWithKeyboardInput() throws TimeoutException {
...
Intent serviceIntent = new Intent(InstrumentationRegistry.getTargetContext(), MyKeyboard.class);
IBinder binder = mServiceRule.bindService(serviceIntent);
MyKeyboard keyboard = retrieveMyKeyboardInstance(binder);
...
}
发件人:https://github.com/sealor/prototype-Android-Espresso-Keyboard-Testing
关于android - InputMethodService 的仪器测试用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50323270/
检测 C# 代码的最简单方法是什么?我所说的检测是指插入我自己的代码片段以在执行期间收集一些动态信息。 例如(星号代表一些不重要的代码): for (int i=0; i。通过捕获方法调用,我的意思是
我有一个 javaagent,它可以打印出所有已加载类的名称及其来源(它们来自哪里)。 public byte[] transform(ClassLoader loader, String class
我可以使用命令行为单个设备/模拟器运行仪器,但我需要在两个设备上运行它。手动我可以通过打开 Instruments 的两个新窗口并制作两个 js 副本并导入它来实现这一点。但我需要使用命令行来实现这一
Closed. This question needs details or clarity。它当前不接受答案。
在 xcode 工具中测试我的 IOS 应用程序时,我有几次内存泄漏。谁能看出标有“-->”的行为什么会泄漏? --> CLLocationCoordinate2D newCoord = CLLoca
我正在尝试分析我的应用程序并想检查内存泄漏。我打算使用 Xcode 仪器。任何人都建议从 Xcode 仪器开始的好教程。请提出任何替代方案。 最佳答案 这里是教程列表,其中一些是文本文档和视频 关于仪
我正在我的 iOS 设备上运行应用程序,但在 Instruments 中,该设备显示为灰色。 这也意味着我无法附加流程 ( Cant launch iOS app with Instruments o
我正在使用工具“分配”来监视应用程序的内存。虚拟机跟踪器的统计数据让我很困惑。为什么有这么多脏内存(对于我的应用程序,达到32M),我用谷歌搜索了一下,知道当应用程序在后台模式下收到内存警告时,应该首
我正在关注 Ray Wenderlich tutorial for instruments ,但我不知道为什么分析没有显示泄漏的对象? - (void)tableView:(UITableView *
我目前正在开发一款 tvOS 应用。这是我的第一个原生 (Swift) 应用程序。该应用程序将是一个数字标牌应用程序,在事件期间或公司办公室使用。与 iOS/tvOS 上的典型应用程序相比,一个很大的
我正在应用程序上运行仪器。根据仪器,未检测到任何泄漏。 但是,类别CFString (store) 一直在上升。有谁知道 CFString (store) 是什么? 这是否意味着我有泄漏? 最佳答案
如何从命令行为 iOS 自动化 (iPhone/iPad) 运行 apple instruments?我看到一些博客说下面的命令 instruments -w -t /Developer/Platfo
当我从 SVN 检查测试脚本时(提交的文件我的 friend ),我不知道为什么脚本不可编辑,播放脚本和停止脚本选项被禁用并且记录不是一切都在发生。 当我创建一个新的自动化项目并导入相同的项目时脚本文
我的应用程序构建仅在运行仪器时崩溃。重现情况是 100%,但在没有仪器的情况下运行发布版本或运行调试版本时不会崩溃。当 Instruments 运行发布版本时,我无法单步执行并找出崩溃的确切原因。当构
在以前版本的 Instruments 中,我没有遇到任何问题,但现在(v6.2)由于某种原因,Allocations 不会列出我的应用程序的任何对象。我试过调试和 Release模式: 请注意,过滤器
我在我的 View Controller 上什么也没做,我看到了应用程序运行时正在变化的图表。 这真的是泄漏吗? 第一次显示绿色复选标记,然后显示 1 次泄漏,然后没有新的泄漏。 所以这意味着没有泄漏
我有一个 Android 项目(由 Cordova 生成),我想向其添加(检测)测试。它只有一个应该测试的 MainActivity.java。 通常这意味着向 build.gradle 添加一些依赖
我有内存问题(我正在使用 ARC),我确定我在应该是 weakstrong @property。我运行仪器,它向我展示了这个分配: 这显然是一个不发布的问题。但是我可以在 Instruments 中找
我正在使用时间分析器分析我的 WatchKit 扩展应用程序,但轨迹是未符号化的: 我的意思是这些对我来说都是无关的符号,我找不到我的方法名称。如果我点击这些符号中的任何一个,我就可以看到汇编代码。如
我正在使用仪器来分析我正在开发的 iPhone 应用程序中的内存使用情况。我想知道,什么是合理的内存分配大小? 当我获得关于我的目标的信息时,我是否应该选中忽略“NS”、“CF”和“Malloc”前缀
我是一名优秀的程序员,十分优秀!