0

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

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

@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());
        }
    });
}

如您所见,一项测试仅调用setText()EditText 小部件。其他用途sendKeys()。在测试期间是否有首选的最佳实践可以使用这两个选项中的哪一个?还是我应该保留两个测试?

4

1 回答 1

2

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

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

于 2012-11-15T00:14:46.663 回答