Mat*_*hew 5 android automated-tests dialog 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();
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我忘记了一个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());
}
}
Run Code Online (Sandbox Code Playgroud)
我以为那onView(isRoot()).inRoot(isDialog())会匹配任何对话框的根视图。但是,如果不匹配,这似乎只是挂起。因此,当应该满足测试要求时(只有一个对话框出现并被取消),它会挂起。如果我们注释掉该行,并且不显示任何对话框,则测试将挂起“ 检查对话框是否显示”行。
我希望不要与对话框文本匹配,因为它们可能都不同。我仍然需要确保只有一种情况发生。现在,我利用了所有人都拥有的“取消”按钮来进行匹配。但是,我宁愿不依赖于此。
有没有说出来的对话框的显示方法?和是否不显示对话框? 为什么我的支票导致挂起?
由于这是条件/导航逻辑,我会将其放入 ViewModel 中并在单元测试中对其进行测试。使用模拟框架(例如mockito),您可以验证某些方法仅被调用一次。不完全是您问题的答案,但应该可以帮助您避免一些不需要的调用错误。
| 归档时间: |
|
| 查看次数: |
569 次 |
| 最近记录: |