[当用户登录我的应用程序时,如果是第一次登录,则会显示一个警告对话框。否则,它不会出现。
当我尝试编写UI测试时,这很棘手。由于警报对话框是有条件的,因此无法使用以下命令将其关闭:onView(withId(android.R.id.button1)).perform(click())
正如我在其他帖子中看到的建议。
但是,如果它确实出现并且我没有在测试中关闭它,则该测试无法继续进行(因为它无法识别任何其他视图ID),并且失败。
有人对我的处理方式有任何建议吗?
谢谢!
听起来((由于您没有提供更多详细信息,我不得不猜测),您正在基于本地存储的值(也许使用PersistentState
控制着“第一次”对话框的显示)。
如果是这种情况,您可以直接从Espresso测试中控制该值,从而使测试状态符合预期。
此外,请注意-我强烈建议您不要进行依赖的Espresso测试,听起来像是您基于,“。
您的测试必须
能够以随机顺序执行并通过。但是,如果确实出现并且我没有在测试中关闭它,测试被阻止继续进行(因为它无法识别其他任何测试查看ID),但失败。有人对我的处理方式有任何建议吗?
[无论何时编写测试,都必须确保具备必要的条件,以可靠且一致地运行所涉及的测试。这是Arrange, Act, Assert习惯用语的“安排”部分。
因此,如果要测试涉及对话框的流程,则必须安排测试以设置该对话框显示的条件。
如果您要测试
不涉及对话框的流,则必须安排测试以设置不显示对话框的条件。
您尚未发布代码,所以我不知道显示对话框的“条件”是什么,但是基本上,您需要在测试中做一些事情,以确保如果您不希望使用该对话框,则条件为false;否则,则为true你做。也许这是设置共享首选项?例如,您的测试通常看起来像这样:
@Test
fun myAwesomeTest() {
// Arrange - do something to ensure dialog does not show
SomeHelperClass.setConditionToShowDialog(false)
// Act - do actions knowing the dialog will not show
onView(withId(R.id.awesomeId)).perform(click())
// Assert
onView(withId(R.id.duperId)).check(matches(isVisible()))
}
同样,没有代码细节,很难给出更多细节,但希望这足以使您前进。希望有帮助!