【问题标题】:Preferred way to test EditText input in an Android JUnit class在 Android JUnit 类中测试 EditText 输入的首选方法
【发布时间】:2012-11-01 00:11:34
【问题描述】:

我有一个带有 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()。在测试期间是否有首选的最佳实践可以使用这两个选项中的哪一个?还是我应该保留两个测试?

【问题讨论】:

    标签: java android unit-testing junit


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的信息。我一定会检查出来的。我仍然有兴趣更直接地回答我原来的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-18
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    相关资源
    最近更新 更多