首选在Android Junit类中测试EDITTEXT输入的方法



我有一个带有EDITTEXT和按钮小部件的活动。如果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()。在测试期间,是否有首选的最佳实践在这两个选项中使用哪种?还是我应该保留两个测试?

我有可能对旧问题有一个新的答案,http://developer.android.com/tools/testing/testing/testing_ui.html刚刚作为ADT21的一部分发布,如果您只是在从Android测试开始,当然值得一看。

至于实际问题。使用sendkeys()更接近用户实际的操作,因此,如果您有编辑文本或按键按下的侦听器,那么他们实际上会被触发。通常,这可能不是您的问题,因为您可能不会使用此功能,但是如果您没有意识到,它可能会咬您。这样的另一个示例是您如何单击按钮,当前正在调用单击方法时,首选的方法是通过按钮位置发送触摸事件,因为这实际上是用户的作用。

相关内容

最新更新