在Android JUnit类中测试EditText输入的首选方法

时间:2012-11-01 00:11:34

标签: java android unit-testing junit

我有一个带有EditText和Button小部件的Activity。如果EditText为空,则单击该按钮会输出错误消息,或者调用setResult()将值发送回另一个启动此值的活动。

我正在编写一些简单的单元测试来检查这种交互是否有效。我有两个不同版本的同一个测试:

@UiThreadTest
public void testOkButtonOnClickWithNumber() {
    this.numberText.setText(Integer.toString(this.testNumber));
    Assert.assertTrue(this.okButton.performClick());
    Assert.assertTrue(this.activity.isFinishing());
}

public void testOkButtonOnClickWithUserInputNumber() throws Throwable {
    this.sendKeys(Integer.toString(this.testNumber));

    this.runTestOnUiThread(new Runnable() {
        @Override
        public void run() {
            Assert.assertTrue(NumberFilterTest.this.okButton.performClick());
        }
    });

    this.getInstrumentation().waitForIdle(new Runnable() {
        @Override
        public void run() {
            Assert.assertTrue(NumberFilterTest.this.activity.isFinishing());
        }
    });
}

如您所见,一个测试只是在EditText小部件上调用setText()。另一个使用sendKeys()。在测试过程中,这两个选项中是否有一个首选的最佳实践?或者我应该保持两个测试?

1 个答案:

答案 0 :(得分:2)

我可能有一个旧问题的新答案,http://developer.android.com/tools/testing/testing_ui.html刚刚作为adt21的一部分发布,如果你刚刚开始进行Android测试,那么肯定值得一看。

至于实际问题。使用sendKeys()更接近用户实际所做的事情,因此如果您有编辑文本或按键的监听器,那么他们实际上会被解雇。通常情况下,这可能不是您的问题,因为您可能没有使用此功能,但如果您没有意识到它可能会咬你。另一个例子就是你如何点击你的按钮,当你首选的方式是在按钮位置上发送触摸事件时,你正在调用click方法,因为这实际上就是用户所做的事情。