dagger2 和 kotlin 的 Android 单元测试问题

2023-12-12

我试图在 android 的测试文件夹中创建一个 dagger 组件接口,但是在 Dagger 完成生成的类后,它显示错误“无法访问 TestComponent,它是 com.example.animals.di.DaggerTestAppComponent.Check 的超类型”您的模块类路径缺少或冲突的依赖项”。您能帮我解决这个问题吗?

gradle dependecies:
def lifeCycleExtensionVersion = '1.1.1'
def supportVersion = '28.0.0'
def retrofitVersion = '2.3.0'
def glideVersion = '4.9.0'
def rxJavaVersion = '2.1.1'
def navVersion = '2.1.0-alpha05'
def daggerVersion = '2.14.1'
def mockitoVersion = '2.11.0'

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.core:core-ktx:1.2.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation "com.android.support:design:$supportVersion"
    implementation "android.arch.lifecycle:extensions:$lifeCycleExtensionVersion"

    implementation "androidx.navigation:navigation-fragment-ktx:$navVersion"
    implementation "androidx.navigation:navigation-ui-ktx:$navVersion"

    implementation "com.squareup.retrofit2:retrofit:$retrofitVersion"
    implementation "com.squareup.retrofit2:converter-gson:$retrofitVersion"
    implementation "com.squareup.retrofit2:adapter-rxjava2:$retrofitVersion"

    implementation "io.reactivex.rxjava2:rxjava:$rxJavaVersion"
    implementation "io.reactivex.rxjava2:rxandroid:$rxJavaVersion"

    implementation "com.github.bumptech.glide:glide:$glideVersion"

    implementation "com.android.support:palette-v7:$supportVersion"


    implementation "com.google.dagger:dagger:$daggerVersion"
    implementation "com.google.dagger:dagger-android-support:$daggerVersion"
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    kapt "com.google.dagger:dagger-compiler:$daggerVersion"
    kapt "com.google.dagger:dagger-android-processor:$daggerVersion"


    testImplementation "org.mockito:mockito-inline:$mockitoVersion"
    testImplementation "android.arch.core:core-testing:1.1.1"
    kaptTest "com.google.dagger:dagger-compiler:$daggerVersion"

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.2.0'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
 }

TestAppComponent:
   package com.example.animals.di

 import com.example.animals.base.BaseTest
 import dagger.Component
 import javax.inject.Singleton

@Singleton
@Component(modules = [])
interface TestAppComponent {
   fun inject(baseTest: BaseTest)
}

基础测试: com.example.animals.base 包

 import android.app.Application
 import com.example.animals.di.DaggerTestAppComponent
 import org.junit.Before
 import org.mockito.Mockito

open class BaseTest {

    val application = Mockito.mock(Application::class.java)

    @Before
     fun setUp() {
     configureDi()

    }

    private fun configureDi() {
       var testAppComponent = DaggerTestAppComponent.builder().build()

        testAppComponent.inject(this)
    }
 }

我在这里设置测试时遇到了同样的问题我们的仓库在这里。 当看到例子时Tivi,我注意到我们生成的源没有包含在源集中。

在项目中的某个位置添加 gradle 脚本应该可以解决您的问题。

Ex: https://github.com/toggl/android/blob/768f01b55c47ffd3bb7c4a82dea4abf50eac9e1c/database-android/build.gradle#L46-L63(与蒂维相同)。

main.java.srcDirs += 'src/main/kotlin'
debug.java.srcDirs += 'src/debug/kotlin'
release.java.srcDirs += 'src/release/kotlin'
test.java.srcDirs += 'src/test/kotlin'

// For kapt stubs
main.java.srcDirs += [file("$buildDir/generated/source/kapt/main")]
debug.java.srcDirs += [file("$buildDir/generated/source/kapt/debug")]
release.java.srcDirs += [file("$buildDir/generated/source/kapt/release")]
test.java.srcDirs += [file("$buildDir/generated/source/kapt/test")]

// For kotlin code gen during kapt
main.java.srcDirs += [file("$buildDir/generated/source/kaptKotlin/main")]
debug.java.srcDirs += [file("$buildDir/generated/source/kaptKotlin/debug")]
release.java.srcDirs += [file("$buildDir/generated/source/kaptKotlin/release")]
test.java.srcDirs += [file("$buildDir/generated/source/kaptKotlin/test")]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

dagger2 和 kotlin 的 Android 单元测试问题 的相关文章

  • Sqlite数据库生命周期?关闭应用程序后它会被删除吗?

    我正在遵循一个简单的教程 该教程创建一个从 SQLiteOpenHelper 扩展的类 并创建一个包含一个表和 5 行的数据库 好的 但我需要更多地了解 android Sqlite 数据库 例如 如果应用程序关闭或手机关机会发生什么 数据
  • SearchView过滤ListView

    我已经实现了搜索视图来过滤我的列表视图项目 当我输入任何文本时 它会过滤列表 但当我退出搜索视图时 它不会返回原始列表项 public class PlacesListAdapter extends ArrayAdapter
  • 如何以编程方式检查 AndroidManifest.xml 中是否声明了服务?

    我正在编写一个库 该库提供了一项服务 其他开发人员可以通过将其包含在他们的项目中来使用该服务 因此 我无法控制 AndroidManifest xml 我在文档中解释了要做什么 但一个常见的问题是人们忽略了将适当的 标记添加到其清单中 或者
  • Android Activity 生命周期函数基础知识

    我正在测试这段代码 它显示活动所处的状态 public class Activity101Activity extends Activity String tag Lifecycle Called when the activity is
  • Android SIP 来电使用带有广播接收器的服务

    大家好 其实我正在尝试创建一个应用程序 支持基于 SIP 通过互联网进行音频呼叫 这里使用本机 sip 我遇到了来电问题 我已经完成了服务的注册部分 但是在接听电话时我无法接听电话 请帮助我 Service file package exa
  • 无法访问 com.google.android.gms.internal.zzbfm 的 zzbfm 类文件未找到

    我正在将我的 Android 应用程序项目从GCM to FCM 为此 我使用 Android Studio 中的 Firebase 助手工具 并遵循 Google 开发人员指南中的说明 一切都很顺利 并将我的应用程序代码更改为FCM根据助
  • 是否有 ADB 命令来检查媒体是否正在播放

    我想使用 ADB 命令检查根植于终端的外部设备中是否正在播放音频 视频 我无法找到任何 ADB 命令 如果有 我尝试过 adb shell dumpsys media player 我想要一个命令来指定视频是否正在运行 您可以使用以下命令查
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • 在gradle插件中获取应用程序变体的包名称

    我正在构建一个 gradle 插件 为每个应用程序变体添加一个新任务 此新任务需要应用程序变体的包名称 这是我当前的代码 它停止使用最新版本的 android gradle 插件 private String getPackageName
  • 如何使用 IF 检查 TextView 可见性

    我有一个 onCheckedChangeListener 来根据选择的单选按钮显示文本视图 我有 1 个疑问和 1 个难题 想知道是否有人可以帮助我 问题 您能否将单选组默认检查值设置为 否 单选按钮 以便一开始就不会检查任何内容 问题 如
  • Ubuntu 16.04 - Genymotion:找不到 /dev/hw_random

    I install Genymotion on the Ubuntu 16 04 64Bit I created a virtual emulator for Android 6 0 then I run this emulator but
  • 在 SQLite 中搜索时排除 HTML 标签和一些 UNICODE 字符

    更新 4 我已经成功运行了firstchar例如 但现在的问题是使用regex 即使包含头文件 它也无法识别regex操作员 有什么线索可以解决这个问题吗 更新 2 我已经编译了sqlite3我的项目中的库 我现在正在寻找任何人帮助我为我的
  • Google 云端硬盘身份验证异常 - 需要许可吗? (v2)

    我一直在尝试将 Google Drive v2 添加到我的 Android 应用程序中 但无法获得授权 我收到 UserRecoverableAuthIOException 并显示消息 NeedPermission 我感觉 Google A
  • 我的设备突然没有显示在“Android 设备选择器”中

    我正在使用我的三星 Galaxy3 设备来测试过去两个月的应用程序 它运行良好 但从今天早上开始 当我将设备连接到系统时 它突然没有显示在 Android 设备选择器 窗口中 我检查过 USB 调试模式仅在我的设备中处于选中状态 谁能猜出问
  • .isProviderEnabled(LocationManager.NETWORK_PROVIDER) 在 Android 中始终为 true

    我不知道为什么 但我的变量isNetowrkEnabled总是返回 true 我的设备上是否启用互联网并不重要 这是我的GPSTracker class public class GPSTracker extends Service imp
  • 在activity_main.xml中注释

    我是安卓新手 据我所知 XML 中的注释与 HTML 中的注释相同 使用 形式 我想在 Android 项目的 Activity main xml 配置文件中写一些注释 但它给了我错误 值得注意的是 我使用的是 Eclipse 但目前 我直
  • Android:膨胀布局时出现 StackOverFlowError 和 InvokingTargetException

    首先 对不起我的英语 我在膨胀布局时有一个问题 我有一个自定义视图 从 LinearLayout 扩展而来 称为按钮帮助 我在名为的布局上使用该视图加载活动 我的以下代码在所有设备和模拟器上都能完美运行 但具有 QVGA 屏幕 例如 Sam
  • 将 Intent 包装在 LabeledIntent 中以用于显示目的

    要求 我的应用程序中有一个 共享 按钮 我需要通过 Facebook 分享 我需要选择是否安装原生 Facebook 应用程序 我们的决定是 如果未安装该应用程序 则将用户发送到 facebook com 进行分享 当前状态 我可以检测何时
  • 将两个文本视图并排放置在布局中

    我有两个文本视图 需要在布局中并排放置 并且必须遵守两条规则 Textview2 始终需要完整显示 如果布局中没有足够的空间 则必须裁剪 Textview1 例子 文本视图1 文本视图2 Teeeeeeeeeeeeeeeeeextview1
  • 节拍匹配算法

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

随机推荐

  • Python list 要列出的字符串

    我有一个字符串 s 7 9 41 32 67 我需要将该字符串转换为列表 l 7 9 41 32 67 问题是 当我使用列表时 我得到这个 7 9 4 1 3 2 6 7 我正在使用 python 3 2 You can完全按照您的要求使用
  • macOS Big Sur:意外的产品版本 11.1。如何修补 perlbrew?

    我刚刚将我的 Macbook Air 从 10 15 更新到 11 1 然后尝试使用 perlbrew 安装 perl 5 32 perlbrew install perl 5 32 0 Installing Users hakonhaeg
  • 轻松循环遍历 ElasticSearch 文档源数组

    我对网上商店中的产品有以下 ElasticSearch 数据结构 index vue storefront catalog 1 product 1617378559 type doc source configurable children
  • 使所有自动递增整数具有相同的位数且带有前导零

    我想知道是否有一种方法可以将我的 id 列 自动递增 设置为始终使用 mysql 表中的前导零组成 5 位数字 所以第一个值将是 00001 然后 00002 等等直到 99999 而不是 1 2 3 直到 99999 谢谢 尝试添加ZER
  • 快速更改 tableviewcell 的宽度

    我有一个使用 IB 的 tableView 以及自定义单元格和原型单元格 我试图使单元格的宽度比 tableView frame 短一点 以便在左右角之间留出一点空间 var cell tableView dequeueReusableCe
  • 如何在jquery对象上调用raphael方法?

    我正在使用拉斐尔创建一些圆圈 当用户单击按钮时 我想为这些圆圈设置动画 通过增加其半径 我该怎么做呢 例如 这是我的示例代码
  • Spring / JTA / JPA 单元测试:回滚不起作用

    我正在尝试使用 Spring 测试实体 EJB3 EJB 本身不使用 Spring 我希望尽量减少生产 JPA 配置的重复 例如 不重复 persistence xml 我的单元测试似乎有效 但即使我的单元测试应该是事务性的 数据也会在各种
  • 如何通过Map<>将快照键和值拉入列表?

    我一直在关注使用实时数据库的官方 Firebase 教程 https www youtube com watch v sXBJZD0fBa4 我能够从 firebase 实时数据库中提取所有数据 但是 下面的方法提供了数据列表 但不引用父键
  • 本地函数相互调用

    我有两个偶尔互相调用的函数 它们对于使用它们构建另一个函数的模块来说是本地的 该模块与这段代码有点相似 local function iseven n if n 1 then return false else return isodd n
  • 搜索时获取数组超出索引范围异常

    我有一个应用程序 其中我将 json 中的数据显示到列表视图中 现在想要在列表视图上应用搜索功能 但是每当我在编辑框中输入某些内容时 就会出现数组索引超出范围的错误 请帮我解决这个问题 主页活动 public class HomeActiv
  • 如何根据 R 中的 regexpr() 结果创建 TRUE 或 FALSE 列?

    我正在通过一列搜索来寻找模式 reg lt regexpr pattern Data column1 View reg reg 给了我一些数字 如下所示 1 43 15 2 11 19 22 28 20 11 37 32 11 32 20
  • 为什么重复加载和保存时 ImageIO 不保留 JPEG 数据?

    最初我想尝试是否可以从 JPEG 图像重建编辑数据 因为它是一种有损图像格式并且像素值扩散到相邻像素中 为了测试保存和加载 JPEG 图像是否可靠 我编写了以下程序 该程序重复保存和加载 JPEG 图像 直到到达以前见过的图像 这是代码 p
  • Mysql查询根据条件选择不同记录?

    我有这样的表结构 ext no value 我想根据条件选择不同的记录 比如当计数时ext no is 超过两个 and 当且仅当所有这些ext no value为零 我想要下面给出的预期结果 比如 如何编写 mysql 查询这个 任何帮助
  • 类型擦除在 Java Map 类中不起作用

    我使用javap反编译了Map类 类定义仍然显示泛型类型 K 和 V 的存在 这应该已经被类型擦除的概念删除了 为什么这种情况没有发生 javap verbose java util Map Classfile jar file opt j
  • 覆盖-类属性- getter

    我正在定义一个 Debug 类 如下所示 debug False class Debug DrawOutlines True InvinciblePlayer True 我想覆盖Debug类 以便如果 debug 为 False 则 Deb
  • 重力右侧和末端之间的差异[重复]

    这个问题在这里已经有答案了 我正在制作一个 xml 文件 并应用重力来使视图内容将其移动到窗口的最右侧 但我将重力视为右侧和末端 那么 两者之间的实际区别是什么以及在哪里使用哪一个 在阿拉伯语 波斯语和所有 rtl 从右到左 语言环境中 e
  • 在另一种形式上调用过程?

    我确信以前有人问过这个问题 但我似乎找不到 我使用下面的代码显示 MS Access 数据库中的图像 但是 我想知道如何执行以下操作 是否可以采用下面的过程并以另一种形式 调用 它 Scenario 如果我有必须从 3 个不同表单上的按钮调
  • 用于命令行脚本的 Cookbook GUI 界面

    我有一个命令行 Python 脚本 可以很好地在给定一些参数的情况下将一种文件转换为另一种文件 现在我想将其部署给我的一些可能不知道命令行是什么的同事 我可以花几个小时来尝试确定哪个 Python GUI 工具包是 最好的 然后学习如何做我
  • 使用随时间变化的任意布尔条件过滤 Touch.FrameReported IObservable

    我一直在尝试 Windows Phone 7 中的响应式扩展 RX 并且非常接近可行的解决方案 但遇到了一个小细节 我正在尝试使用处理原始触摸事件Touch Frame报告 and Observable FromEvent 有点教育追求 更
  • dagger2 和 kotlin 的 Android 单元测试问题

    我试图在 android 的测试文件夹中创建一个 dagger 组件接口 但是在 Dagger 完成生成的类后 它显示错误 无法访问 TestComponent 它是 com example animals di DaggerTestApp