(DAGGER-ANDROID) 无法在 Espresso 测试上使用 @Inject 且无法使用 mockWebServer

2023-12-24

我正在尝试创建 Espresso 测试并使用mockWebServer事情是当我尝试创建我的mockWebServer它调用真正的 api 调用,我想拦截它并模拟响应。

我的匕首组织是:

My App

open class App : Application(), HasAndroidInjector {

    lateinit var application: Application

    @Inject
    lateinit var androidInjector: DispatchingAndroidInjector<Any>

    override fun androidInjector(): AndroidInjector<Any> = androidInjector

    override fun onCreate() {
        super.onCreate()
        DaggerAppComponent.factory()
            .create(this)
            .inject(this)
        this.application = this
    }
}

然后是MyAppComponent

@Singleton
@Component(
    modules = [
        AndroidInjectionModule::class,
        AppModule::class,
        RetrofitModule::class,
        RoomModule::class,
        AppFeaturesModule::class
    ]
)
interface AppComponent : AndroidInjector<App> {

    @Component.Factory
    interface Factory {
        fun create(@BindsInstance application: App): AppComponent
    }
}

然后我创建了这个 TestApp

class TestApp : App() {

    override fun androidInjector(): AndroidInjector<Any> = androidInjector

    override fun onCreate() {
        DaggerTestAppComponent.factory()
            .create(this)
            .inject(this)
    }
}

这是我的 TestAppComponent

@Singleton
@Component(
    modules = [
        AndroidInjectionModule::class,
        AppModule::class,
        TestRetrofitModule::class,
        AppFeaturesModule::class,
        RoomModule::class]
)
interface TestAppComponent : AppComponent {
    @Component.Factory
    interface Factory {
        fun create(@BindsInstance application: App): TestAppComponent
    }
}

注意:这里我创建了一个新模块,名为TestRetrofitModule其中 BASE_URL 是“http://本地主机:8080 http://localhost:8080”,我不知道是否还需要其他东西。

我还创建了TestRunner

class TestRunner : AndroidJUnitRunner() {

    override fun newApplication(
        cl: ClassLoader?,
        className: String?,
        context: Context?
    ): Application {
        return super.newApplication(cl, TestApp::class.java.name, context)
    }

}

并把它放在testInstrumentationRunner

问题1

我不能使用

@Inject
lateinit var okHttpClient: OkHttpClient

因为它说它没有初始化。

问题2(感谢Skizo解决)

我的mockWebServer没有调度响应,尽管没有指向真正的api调用,而是指向我放入TestRetrofitModule的那个,问题是我必须链接mockWebServer和Retrofit。


您发布的设置看起来是正确的。至于App没有提供,您可能需要将其绑定在组件中,因为现在您正在绑定TestApp仅有的。所以你需要更换

fun create(@BindsInstance application: TestApp): TestAppComponent

with

fun create(@BindsInstance application: App): TestAppComponent
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(DAGGER-ANDROID) 无法在 Espresso 测试上使用 @Inject 且无法使用 mockWebServer 的相关文章

  • 如何快速自动发送FCM或APNS消息?

    我正在开发一项后端服务 通过 FCM 或 APNS 向移动应用程序发送推送通知 我想创建一个可以在一分钟内运行的自动化测试 并验证服务器是否可以成功发送通知 请注意 我不一定需要检查通知是否已送达 只需检查 FCM 或 APNS 是否已成功
  • 使用workmanager时Firestore脱机持久性错误

    我正在使用一个WorkManger定期从我的中检索信息Firestore当应用程序处于后台和前台时的数据库 此信息用于根据状态更新 UI 因此不同的状态会添加或删除 UI 的不同部分 第一次运行时效果很好 但是 一旦应用程序处于后台并且Wo
  • 卸载后 Web 应用程序不显示“添加到主屏幕”

    这是我第一次创建网络应用程序 我设法解决了这个问题 所以我得到了实际的 chrome 提示 将其添加到主屏幕 然后我从手机上卸载了该网络应用程序 因为我想将其展示给我的同事 但是 屏幕上不再出现提示 问题 这是有意为之的行为还是我的应用程序
  • 无法获取log.d或输出Robolectrict + gradle

    有没有人能够将 System out 或 Log d 跟踪从 robolectric 测试输出到 gradle 控制台 我在用Robolectric Gradle 测试插件 https github com robolectric robo
  • Android 中 Kotlin 协程的正确使用方式

    我正在尝试使用异步更新适配器内的列表 我可以看到有太多的样板 这是使用 Kotlin 协程的正确方法吗 这个可以进一步优化吗 fun loadListOfMediaInAsync async CommonPool try Long runn
  • CollapsingToolBarLayout - 状态栏稀松布颜色不改变

    几天前我更新了我的 android studio 并开始使用 CoordinatorLayout 和 CollapsingToolbarLayout 只是尝试一些东西 工具栏稀松布颜色似乎覆盖了状态栏初始颜色和状态栏稀松布颜色 从 xml
  • 在 java 类和 android 活动之间传输时音频不清晰

    我有一个android活动 它连接到一个java类并以套接字的形式向它发送数据包 该类接收声音数据包并将它们扔到 PC 扬声器 该代码运行良好 但在 PC 扬声器中播放声音时会出现持续的抖动 中断 安卓活动 public class Sen
  • Android:捕获的图像未显示在图库中(媒体扫描仪意图不起作用)

    我遇到以下问题 我正在开发一个应用程序 用户可以在其中拍照 附加到帖子中 并将图片保存到外部存储中 我希望这张照片也显示在图片库中 并且我正在使用媒体扫描仪意图 但它似乎不起作用 我在编写代码时遵循官方的Android开发人员指南 所以我不
  • JavaMail 只获取新邮件

    我想知道是否有一种方法可以在javamail中只获取新消息 例如 在初始加载时 获取收件箱中的所有消息并存储它们 然后 每当应用程序再次加载时 仅获取新消息 而不是再次重新加载它们 javamail 可以做到这一点吗 它是如何工作的 一些背
  • 获取当前 android.intent.category.LAUNCHER 活动的实例

    我创建了一个库项目 并在多个应用程序之间共享 我实现了一个简单的会话过期功能 该功能将在一段时间后将用户踢回到登录屏幕 登录屏幕活动是我的主要活动 因此在清单中它看起来像这样
  • Google 云端硬盘身份验证异常 - 需要许可吗? (v2)

    我一直在尝试将 Google Drive v2 添加到我的 Android 应用程序中 但无法获得授权 我收到 UserRecoverableAuthIOException 并显示消息 NeedPermission 我感觉 Google A
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • .isProviderEnabled(LocationManager.NETWORK_PROVIDER) 在 Android 中始终为 true

    我不知道为什么 但我的变量isNetowrkEnabled总是返回 true 我的设备上是否启用互联网并不重要 这是我的GPSTracker class public class GPSTracker extends Service imp
  • Android 套接字和 asynctask

    我即将开始制作一个应该充当 tcp 聊天客户端的应用程序 我一直在阅读和阅读 我得出的结论是最好 如果不需要 将我的套接字和异步任务中的阅读器 问题是我不确定从哪里开始 因为我是 Android 新手 这至少对我来说是一项艰巨的任务 但据我
  • 实现滚动选择 ListView 中的项目

    我想使用 ListView 您可以在其中滚动列表来选择一个项目 它应该像一个 Seekbar 但拇指应该是固定的 并且您必须使用该栏来调整它 我面临的一个问题是 我不知道这种小部件是如何调用的 这使得我很难搜索 所以我制作了下面这张图片 以
  • 将 Intent 包装在 LabeledIntent 中以用于显示目的

    要求 我的应用程序中有一个 共享 按钮 我需要通过 Facebook 分享 我需要选择是否安装原生 Facebook 应用程序 我们的决定是 如果未安装该应用程序 则将用户发送到 facebook com 进行分享 当前状态 我可以检测何时
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • android sdk 的位置尚未在 Windows 操作系统的首选项中设置

    在 Eclipse 上 我转到 windows gt Android SDK 和 AVD Manager 然后弹出此消息 Android sdk 的位置尚未在首选项中设置 进入首选项 在侧边栏找到 Android 然后会出现一个 SDK 位
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两

随机推荐

  • 无法从静态方法 Flutter 访问实例成员

    我正在尝试打电话playRefreshBar在我的代码中 但我收到这样的警告 无法从静态方法访问实例成员 这是我的静态代码 static List
  • 准备好的声明方法..困惑

    我不知道缺少什么或为什么它不显示数据 如果我不使用准备好的语句 我的代码就可以工作 当我使用准备好的语句时 代码似乎不再起作用 db php Class Database public mysqli public function cons
  • 如何在 C# 中读取 Http 响应流两次?

    我试图通过以下方式读取 Http 响应流两次 HttpWebResponse response HttpWebResponse request GetResponse stream response GetResponseStream Rs
  • “导航器”类型上不存在属性蓝牙

    我综合了示例代码 https googlechrome github io samples web bluetooth device information characteristics html进入我的 Angular 6 项目 但有一
  • 使用perl创建一个简单的计算器

    我需要用 Perl 设计一个简单的计算器 名为 ex1 pl 只需 and 功能 以下是我所拥有的 while ARGV gt 0 if m d s s d if 2 print 1 3 n elsif 2 print 1 3 n elsi
  • 在字典中查找整数最近邻

    我有一个dict需要整数键 a a 1 100 a 55 101 a 127 102 我希望在询问时能够选择最近的邻居 a 20 should return a 1 100 a 58 should return a 55 101 a 167
  • 通过 Postman 发送 CSRF 令牌

    我正在尝试使用 Postman 测试我的网络服务器的登录 首先 我向登录 URL 发送 GET 请求 并获得一个 CSRF 令牌作为 cookie 然后 我使用我的用户名 密码和 CSRF 令牌向该登录页面发出 POST 请求 我的问题是
  • 如何使用待定意图启动新活动[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 谁能告诉我如何启动一个新的Activity using PendingIntent还可以使用待定意图传递值 提前致谢 Intent inte
  • Qt - setLayout() 和 setCentralWidget()

    我最近开始使用 Qt 和 Qwt 我自己找不到自己的错误 请帮我 有代码 我知道我的错误在这里 h file class MainWindow public QMainWindow Q OBJECT QWidget centralWidge
  • std::result_of 和 decltype 之间的区别

    我在理解其需求时遇到了一些困难std result of在 C 0x 中 如果我理解正确的话result of用于获取使用某些类型的参数调用函数对象的结果类型 例如 template
  • CSS 中带有边框折叠的表格边框颜色

    我想在表中的某个字段上方放一行 以表明它是上述值的总和 但是 默认情况下表格已经有边框 这是一个例子 我有一个边框折叠的表格 我在一个字段上设置了下边框 在其下方的字段上设置了上边框 这两个都指定相同的边框 使用顶部 CSS 有没有办法使用
  • 错误:“您正在尝试添加不可为空的字段”

    我定义了下面的模型并得到 error You are trying to add a non nullable field user to videodata without a default we can t do that 模型 py
  • WPF ListBox 在用户滚动时生成项目

    我正在尝试使用ListBox向用户显示可能无限的选项列表 目前 我只是在任意点切断列表 但我想允许用户根据需要向下滚动 另外 我想尽可能避免生成不可见的项目 因为必须进行一些计算才能生成每个项目 我尝试写作listBox ItemsSour
  • 如何使用 PowerShell 获取自定义程序集属性

    在 net 项目的 AssemblyInfo 文件中 可以通过以下方式指定自定义程序集属性 程序集 AssemblyMetadata key1 value1 我的问题是如何通过 powershell 从已编译的 net 程序集中检索该值 我
  • 使用 Spring-data-cassandra 查询具有复合主键的表

    使用 CassandraReporitory 的 findOne 或 findAll 方法时出现以下异常 Caused by java lang IllegalStateException property does not have a
  • Nodejs 中什么是永远?

    我很难理解什么是forever在nodejs中 有人可以用我能理解的最简单的方式解释什么是永远以及它的目的是什么 forever是一个node js包 用来保存服务器alive即使服务器崩溃 停止 当节点服务器由于某些错误 异常等原因停止时
  • 消息队列、EventBus 和 Pub/Sub 之间的区别?

    我对消息队列 例如 ActiveMQ RabbitMQ ZeroMQ 和事件总线 例如 Guava 事件总线 https code google com p guava libraries wiki EventBusExplained Ak
  • Linux 世界中有哪些可用的 MVC Web 框架?

    我从未在 Linux 上做过任何 Web 开发 我即将开始一个需要它的项目 我喜欢 ASP Net MVC 那么在 Linux 上有哪些遵循相同原则的可用选项呢 该项目是一个very简单的 电子商务 网站 两种或三种产品 可能还会出现其他更
  • NoSuchMethodError:org.apache.http.conn.ssl.SSLConnectionSocketFactory

    我不断得到 Exception in thread main java lang NoSuchMethodError org apache http conn ssl SSLConnectionSocketFactory
  • (DAGGER-ANDROID) 无法在 Espresso 测试上使用 @Inject 且无法使用 mockWebServer

    我正在尝试创建 Espresso 测试并使用mockWebServer事情是当我尝试创建我的mockWebServer它调用真正的 api 调用 我想拦截它并模拟响应 我的匕首组织是 My App open class App Applic