我有一个带有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()
。在测试过程中,这两个选项中是否有一个首选的最佳实践?或者我应该保持两个测试?
答案 0 :(得分:2)
我可能有一个旧问题的新答案,http://developer.android.com/tools/testing/testing_ui.html刚刚作为adt21的一部分发布,如果你刚刚开始进行Android测试,那么肯定值得一看。
至于实际问题。使用sendKeys()更接近用户实际所做的事情,因此如果您有编辑文本或按键的监听器,那么他们实际上会被解雇。通常情况下,这可能不是您的问题,因为您可能没有使用此功能,但如果您没有意识到它可能会咬你。另一个例子就是你如何点击你的按钮,当你首选的方式是在按钮位置上发送触摸事件时,你正在调用click方法,因为这实际上就是用户所做的事情。