Java 在检测测试期间向文本编辑发送大写字母

Java 在检测测试期间向文本编辑发送大写字母,java,android,testing,junit,user-input,Java,Android,Testing,Junit,User Input,我正在为我的Android应用程序编写JUnit测试用例。测试类扩展了ActivityInstrumentationTestCase2,并调用sendKeys()来模拟用户对TextEdit小部件的输入。但是,所有字母键代码(例如,KeyEvent.KEYCODE_g)只向文本编辑发送小写字母。在发送字母键之前,我尝试发送KeyEvent.KEYCODE\u SHIFT\u LEFT,但似乎不起作用。那么,如何模拟用户键入大写字母呢 编辑: 我可以手动输入大写字母。实际上,EditText的定义

我正在为我的Android应用程序编写JUnit测试用例。测试类扩展了ActivityInstrumentationTestCase2,并调用
sendKeys()
来模拟用户对
TextEdit
小部件的输入。但是,所有字母键代码(例如,
KeyEvent.KEYCODE_g
)只向
文本编辑发送小写字母。在发送字母键之前,我尝试发送
KeyEvent.KEYCODE\u SHIFT\u LEFT
,但似乎不起作用。那么,如何模拟用户键入大写字母呢

编辑:

我可以手动输入大写字母。实际上,EditText的定义是

    <EditText android:id="@id/brand_text"
              android:singleLine="true"
              android:capitalize="words"
              android:hint="@string/brand_hint"
    />

然而,当我这样做时,测试失败了。我删掉了所有的代码,所以我现在没有详细的信息。我将尝试重新创建它,并用这些细节编辑此问题。

如果您想执行以下操作:

EditText brandText = this.activity.findViewById(R.id.brand_text);
brandText.setText(someString);
您实际需要做的是:

EditText brandText = this.activity.findViewById(R.id.brand_text);
instrumentation.runOnMainSync(new Runnable() {
    @Override
    public void run() {
        brandText.setText(someString);
    }
}); 
这是因为您需要在UI线程(或主线程,您喜欢的任何名称)上与gui进行任何交互

这样的方法:

public void setText(EditText editText, final String textToSet){
    instrumentation.runOnMainSync(new Runnable() {
        @Override
        public void run() {
            brandText.setText(textToSet);
        }
    }); 
}

对你来说应该很好。

我在我的OP中没有提到我正在编写一个方法,将
字符串的字符发送到文本框。我试着按照@PaulHarris的建议使用
setText()
,但没有成功;我的测试仍然没有通过一些断言


经过一番挖掘,终于找到了适合我的作品。(通过调用测试类,您可以获得一个
Instrumentation
对象。)

您是否尝试过像sendKeys(“A”)一样发送;与KeyEvent.KEYCODE\u A)@DurairajP Yes不同,
sendKeys(“A”)
相当于
sendKeys(KeyEvent.KEYCODE\u A)
:“键序列是一个字符串,包含KeyEvent中指定的键名,没有KEYCODE_uu前缀。”@Code Guru:在你的问题中,你说你尝试了KeyEvent。KEYCODE_u在字母代码之前左移位。我假设这是一个打字错误,应该是
KeyEvent.KEYCODE\u-SHIFT\u-LEFT
@Squonk是的,那是一个打字错误……因为KEYCODE\u-LEFT\u-SHIFT根本不存在。(现已修复)Shift应该可以工作,文本编辑是否允许手动输入大写字母?您是否考虑过使用robotium或只是在测试的主线程上设置文本?如果/当您有时间时,是否可以查看我的相关问题?另外,
Instrumentation.runOnMainSync()
ActivityInstrumentationTestCase2.runTestOniThread()
Activity.runOniThread()之间的区别是什么
(除了第一个同步运行之外)?
public void setText(EditText editText, final String textToSet){
    instrumentation.runOnMainSync(new Runnable() {
        @Override
        public void run() {
            brandText.setText(textToSet);
        }
    }); 
}