我有一个检查多个条件的方法,并在满足时调用另一个活动。如果条件不满足,则应显示错误对话框(当前正在使用DialogFragment显示警告对话框)。该方法如下所示:
void checkAndCall() {
CustomObject o1 = null;
try {
o1 = CustomObject.parse(editText1.getText().toString());
} catch (CustomException e) {
handleBadCase(e);
return;
}
CustomObject o2 = null;
try {
o2 = CustomObject.parse(editText2.getText().toString());
} catch (CustomException e) {
handleBadCase(e);
return;
}
callOtherActivity();
}
不幸的是,我忘记了一个return语句,导致该方法进入下一次检查(失败)并显示两个错误对话框。我想确保这不会再次发生,所以已经为它编写了一个测试。
我的测试看起来像这样:
public class TestClass {
@Rule
public ActivityTestRule<MyActivity> mActivityRule = new ActivityTestRule<>(MyActivity.class);
@Test
public void onlyOneDialogAppearsWithEmptySolve() {
/* Hit solve with no text entered */
onView(withId(R.id.solve_button)).perform(click());
/* Check that dialog is displayed */
onView(isRoot()).inRoot(isDialog()).check(matches(isDisplayed()));
/* Press cancel */
onView(withText(getString(R.string.cancel))).perform(click());
/* No dialog is displayed */
onView(isRoot()).inRoot(isDialog()).check(doesNotExist());
}
}
我原以为onView(isRoot()).inRoot(isDialog())
会匹配任何对话框的根视图。但是,如果它不匹配任何东西,这似乎就会挂起。因此,当应该满足测试时(只出现一个对话框并取消),它会挂起。如果我们注释掉该行,并且不显示任何对话框,则测试将挂起检查对话框是否显示行。
我宁愿不与对话文本匹配,因为它们可能都不同。我仍然需要确保只有一个发生,如果有的话。现在,我正在利用他们所有人的&#34;取消&#34;按钮匹配。但是,我宁愿不依赖于此。
是否有方法说是否显示任何对话框?和是否没有显示对话框?为什么我的检查会导致此挂起?