当前位置: 首页 > 知识库问答 >
问题:

用Dagger 2和自定义范围测试浓缩咖啡

危斯伯
2023-03-14

在最近迁移到Dagger2之后,我正在开发的应用程序的每个功能都使用了@ActivityScope。每个应用程序特性都是使用MVP模式实现的,并且有自己的本地dagger组件设置,它依赖于应用程序组件,以获得整个应用程序生命周期(由应用程序提供)所需的依赖关系。每个特性的activity都将一个提供主要应用程序组件的基类扩展到一个由每个activity覆盖的方法,以便设置本地dagger组件(构建本地组件并实例化本地模块)。

我试图解决的问题是如何在测试中的activity中注入mocks。我遇到的主要问题是无法在运行时将原始的本地组件和相应的模块与模拟的组件进行交换。我读到很多关于用匕首2测试浓缩咖啡的文章,但它们并不是在推广清洁架构。在大多数情况下,它们依赖于AppComponent来注入所有活动,在我的例子中,每个特性的组件都负责注入它自己的activity。

到目前为止,我想出的最佳方法是引入一个组件构建器,该组件构建器仅作为测试设置的一部分进行初始化,并且在activity代码中使用该设置(如果初始化),否则将设置真正的组件。但是,我不愿意将生产和测试代码混合在一起。这里是一个示意图,它代表了匕首的设置:匕首2设置

共有1个答案

终安和
2023-03-14

我最后采用的方法是创建一个定制的AndroidJUnitRunner,如本文所述,并创建组件/模块,这些组件/模块为每个应用程序特性提供模拟,包括应用程序模块check Google doc for best Practices。此外,每个测试中的activity都必须被重写以注入模拟(仅仅是注入模拟依赖项的方法)。

为了保持主应用程序清单的清洁,在调试清单中声明被重写的测试活动。希望这种方法能帮助与我的Dagger2设置类似的人用Espresso和Dagger2进行测试。

祝你有个摇滚日!

 类似资料:
  • 我在做Espresso测试时遇到了一个问题,我知道Espresso不能处理动画,所以我在下面做了。-禁用我的测试设备窗口动画,过渡动画和动画师持续时间比例都设置为关闭(这不起作用)-然后我试图在我的代码中添加一个标志(如。espresso_testing=true。如果为true,我的代码将跳过调用所有startAnimation()函数调用。--->这很管用。然而,在编写espresso测试用例

  • 当我试图编写一个与listview项交互的代码时,我得到了一个OmbyuousViewMatcherException异常。场景如下。 我有一个包含两个视图的listview 文本视图 按钮查看 我在列表中有将近250行。所有按钮都有文本“预订”或“取消”。他们在一个洗牌的顺序。我想直接点击列表中的第一个“预订它”按钮。我已经尝试了很多方案,但仍然无法找到解决方案。拜托谁帮帮我。 下面是我现在的代

  • 浓缩咖啡测试很烦人,因为像这样的代码 给出如下错误

  • 我很难说服新的Android构建系统运行测试。在运行测试时,它给出了错误,这在其他问题中已经讨论过,但其中没有任何问题能够解决我的问题。 我已经将它剥离下来,这样我的测试包就完全不依赖于主包(),但仍然存在启动活动的问题。 我的测试活动: 和我的测试类: 建筑的相关部分。等级: 我获得的完整堆栈跟踪是: 我没有包括我的,因为我读到的所有内容都表明,我不需要为添加意图,但是我无论如何都试图这样做,结

  • 我有一个MainMenu活动,它从文件中获取数据并显示出来。我希望数据在每次浓缩咖啡测试开始时被删除,并且在测试之间不会持续。 我尝试了以下方法: 但是,它不会删除文件。我认为上下文可能不正确。有没有办法在浓缩咖啡测试开始时清除内部存储? 这些文件是。ser '文件。