如果没有显示对话框,请检查Espresso

时间:2018-02-24 06:49:29

标签: android dialog automated-tests android-espresso

我有一个检查多个条件的方法,并在满足时调用另一个活动。如果条件不满足,则应显示错误对话框(当前正在使用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;按钮匹配。但是,我宁愿不依赖于此。

是否有方法说是否显示任何对话框?是否没有显示对话框?为什么我的检查会导致此挂起?

0 个答案:

没有答案