我将在Kotlin中开发一个Android应用程序,并且试图弄清楚如何初始化模拟的依赖关系。例如,该应用将对服务器进行API调用,从位置提供者获取用户的位置,从内容管理系统中提取图像,将数据本地存储在数据库和Android的“共享的偏好设置”中,并根据当前约会时间。因此,我要模拟很多外部依赖项,包括当前日期/时间,以便我可以验证年龄计算等。
我的测试目标只是使用Android检测的测试来验证我的应用程序的屏幕。我不希望依赖于真正的外部系统,因为测试这些系统是这些系统的开发人员的责任。
在阅读Android的文档Consider whether to use test doubles时,我注意到它提供了一个很好的提示:“提示:请与库作者联系,以查看他们是否提供您可以可靠地依赖的任何官方支持的测试基础结构,例如伪造品。”但是,该文档并没有真正说明如何初始化第三方测试基础结构。
以下是到目前为止我对我的选择的了解,但是所有这些又回到了我不了解的基本知识:被测试的Android应用如何知道它应该以测试模式还是生产模式运行?
How to set Allow Mock Location on Android Device before executing AndroidTest with uiautomator and espresso?
总之,我想使用带有Espresso的Android仪器测试来测试Kotlin Android应用程序的UI,但是我不知道如何设置测试,以便外部依赖项使用仿真代码而不是生产代码。我应该使用模拟,依赖注入(inject)还是通过build.gradle自定义?有人可以帮助我使我的想法步入正轨吗?
最佳答案
经过大量搜索后,我发现Android ActivityTestRule允许您推迟启动Activity。如Fast Mocked UI Tests on Android Kotlin所示,这使测试代码有时间初始化仿真的依赖项。
关于android - 如何在Kotlin Android UI测试中初始化模拟的外部依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57011143/