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