Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何测试InputMethodService_Java_Android_Junit_Android Service_Android Testing - Fatal编程技术网

Java 如何测试InputMethodService

Java 如何测试InputMethodService,java,android,junit,android-service,android-testing,Java,Android,Junit,Android Service,Android Testing,我有一个Android的基本实现,我正试图为它编写单元测试。我的应用程序没有任何活动,只有InputMethodService的实现 到目前为止,我有一个ServiceTestCase的基本实现,它工作得很好: SoftKeyboardTest.java public class SoftKeyboardTest extends ServiceTestCase<SoftKeyboard> { @Override protected void

我有一个Android的基本实现,我正试图为它编写单元测试。我的应用程序没有任何活动,只有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);
        }
}
public void InsertText(String sentence) {
    getCurrentInputConnection().commitText(sentence, 1);
}

public void ReadText(int chars) {
    getCurrentInputConnection().getTextBeforeCursor(chars, 0);
}
显然,在这种情况下,我得到了一个NullPointerException,因为实际上没有任何聚焦的EditText


我怎样才能让我的测试应用程序启动我的服务,以某种方式关注EditText,然后启动我的测试用例,这样我就可以正确地测试我的服务方法?

如果你对输入法进行单元测试,我会在一个足够低的级别上测试它,它不需要输入连接。如果您正在进行集成/验收级别测试,我只需编写一个带有编辑文本字段的应用程序,并在其中驱动输入/输出


但事实上,已经做了两年了——在这个水平上的测试几乎是无用的。你的问题不会来自默认的编辑文本实现,而是来自成千上万的应用程序,这些应用程序将EditText子类化,或者创建自己的EditText类,这些类的行为会有细微的不同。您无法对此进行自动测试,您将花费数年的时间来修复这些错误。

也许正如他们在本帖中所建议的那样?(使用requestFocus())我会的,但我没有可用的EditText。我的应用只是一个没有前端UI的服务。我要找的是某个全局控件上的requestFocus(),可能是通过UI自动化?好的,所以我在搜索android testUtil类时搜索了一下,在GitHub上找到了一个项目,但它们使用一些自定义导入,我不确定它是否适合您的项目。但事实是:在过去一周的研究中,我得出了相同的结论。最后,我使用EasyMock for Android取消了对CommitteText()和getTextBeforeCursor()的两个调用,这非常简单,只需要几行代码。谢谢你的解释和这个例子中为什么需要模仿。祝你键盘好运。你在做一些新的有趣的事情,或者这只是一个个人项目,看看它是什么样子的?希望很有趣,尝试构建一个键盘原型,它提供一个大的建议区域,并结合来自键盘的手势。如果有效的话会很有趣:)建议区域是一件很棘手的事情,尤其是在小型设备上。不是代码方面的,而是UI方面的。主要问题是空间——小型设备缺乏垂直空间。尽管有些键盘通过一个手势将整个键盘区域变成一个建议区域来解决这个问题。我们曾一度考虑过Swype,但从来没有时间去做——这是我重新设计单词选择列表的神秘阶段2。我确实认为手势改进还有很大的空间,你的问题是可发现性和用户教育。完全同意,我的建议在平板电脑上非常有效,但在手机上效果不太好。我已经编写了一个自定义视图,它位于Android默认建议/输入视图机制之外,因此我可以根据设备的大小加载两种不同的方法-我只需要找出较小设备的可用性问题。