当涉及到页面互相关联的逻辑,一个典型的场景就是在订阅页面订阅一个任务,然后在订阅列表页需要及时显示最新添加的订阅内容。官方的用例是把它放在一条测试里面就不用说了,在我们的测试方案里面应该怎么处理。
最后我们选择的方案是分开测试:
在订阅页面进行订阅相关测试,在这个页面只验证是否订阅成功。
在订阅列表界面,通过模拟订阅操作,发送一个订阅成功通知给这个页面,测试该页面是否会及时显示最新的订阅内容。
由于 Espresso 是以 Activity 为入口的,所以可能会导致产生一些误会,我们的单页面就是完全对应到 Activity,其实在我们的设计里面单页面对应到的独立子页面的,所以 Fragment 可以作为一个单独的「单页面测试存在」。在我们的应用里面,首界面有三个 tab,所以加上 MainActivityTest 这个单页面测试首界面总共有四个单页面测试。
在应用中完成某些任务后,会发送一个全局的广播,然后会在后台触发一些和当前页面没有什么关联弹窗。这种场景对我们的 UI 测试是个挑战,由于的随机性,除非在每次都做大量重复的判断,否则很容易导致 UI 测试被中断失败。
针对这样的场景我们有个小伙伴提了一个特别好的解决方案: