我正在为我的活动编写功能测试,其中包含EditText和TextView。 TextView根据EditText的用户输入进行更改。当我运行测试时,EditText有时不会得到我的输入,因此测试失败。
以下是我的测试的最小版本,它仍然给我同样的问题。
public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActivity> {
private MainActivity mainActivity;
public MainActivityTest() {
super(MainActivity.class);
}
@Override
protected void setUp() throws Exception {
super.setUp();
mainActivity = getActivity();
}
public void testEditTextOne() {
final EditText e = (EditText) mainActivity.findViewById(R.id.edit_message);
getInstrumentation().runOnMainSync(new Runnable() {
@Override
public void run() {
e.requestFocus();
}
});
getInstrumentation().waitForIdleSync();
getInstrumentation().sendStringSync("120");
getInstrumentation().waitForIdleSync();
assertEquals("120", e.getText().toString());
}
public void testEditTextTwo() {
final EditText e = (EditText) mainActivity.findViewById(R.id.edit_message);
getInstrumentation().runOnMainSync(new Runnable() {
@Override
public void run() {
e.requestFocus();
}
});
getInstrumentation().waitForIdleSync();
getInstrumentation().sendStringSync("130");
getInstrumentation().waitForIdleSync();
assertEquals("130", e.getText().toString());
}
}
当我运行上述测试时,大多数情况下testEditTextOne()
会通过而testEditTextTwo()
会失败。有时候,两个测试都会失败。
testEditTextTwo()
如果我单独运行它会通过,但如果重复运行大约10次,有时会失败。
我正在使用Android Studio 1.1.0上的“Android Instrumentation Tests”运行测试,并且不使用任何第三方测试框架。
我刚刚开始使用Android,所以我不知道是否会造成某种竞争条件。请解释一下导致这种奇怪行为的原因。