unit-testing - 找不到符号导入 dagger.hilt.android.internal.Contexts

标签 unit-testing dagger-hilt

我正在尝试为 Dagger_Hilt (hilt-android-testing:2.38.1) 编写测试,但不幸的是,当我运行测试时发生了此错误。我不明白有什么问题。如果有人能帮助我解决这个错误,那将会有很大帮助。

cannot find symbol import dagger.hilt.android.internal.Contexts; ^

symbol: class Contexts location: package dagger.hilt.android.internal

ShoppingDaoTest.kt 类:

    @ExperimentalCoroutinesApi
    @SmallTest
    @HiltAndroidTest
    class ShoppingDaoTest {

       @get:Rule
       var hileRule = HiltAndroidRule(this)

       @get:Rule
       var instantTaskExecutorRule = InstantTaskExecutorRule()

       @Inject
       @Named("test_db")
       lateinit var database: ShoppingItemDatabase
   
       private lateinit var dao: ShoppingDao

       @Before
       fun setup() {
         hileRule.inject()
         dao = database.shoppingDao()
       }

      @After
      fun teardown() {
        database.close()
      }

  
    @Test
    fun insertShoppingItem() = runBlockingTest {
        val shoppingItem = ShoppingItem("name", 1, 1f, "url", id = 1)
        dao.insertShoppingItem(shoppingItem)

        val allShoppingItems = dao.observeAllShoppingItems().getOrAwaitValue()

        assertThat(allShoppingItems).contains(shoppingItem)

    }
}

TestModule.kt 类:

@Module
@InstallIn(SingletonComponent::class)
object TestAppModule {

    @Provides
    @Named("test_db")
    fun provideinMemoryDb(
        @ApplicationContext context: Context
    ) = Room.inMemoryDatabaseBuilder(context, ShoppingItemDatabase::class.java)
        .allowMainThreadQueries()
        .build()


}

HiltTestRunner.kt 类:

class  HiltTestRunner : AndroidJUnitRunner() {

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

和 build.gradle 设置:

android {
  defaultConfig {
    ...
    testInstrumentationRunner "com.mypackage.name.HiltTestRunner"
  }
}

 dependencies{
  ...
 
      // Local Unit Tests
implementation "androidx.test:core:1.4.0"
testImplementation "junit:junit:4.13.2"
testImplementation "org.hamcrest:hamcrest-all:1.3"
testImplementation "androidx.arch.core:core-testing:2.1.0"
testImplementation "org.robolectric:robolectric:4.3.1"
testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:1.2.1"
testImplementation "com.google.truth:truth:1.0.1"
testImplementation "org.mockito:mockito-core:2.21.0"

// Instrumented Unit Tests
androidTestImplementation "junit:junit:4.13.2"
androidTestImplementation "com.linkedin.dexmaker:dexmaker-mockito:2.12.1"
androidTestImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:1.2.1"
androidTestImplementation "androidx.arch.core:core-testing:2.1.0"
androidTestImplementation "com.google.truth:truth:1.0.1"
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
androidTestImplementation "org.mockito:mockito-core:2.21.0"
androidTestImplementation 'com.google.dagger:hilt-android-testing:2.38.1'

kaptAndroidTest 'com.google.dagger:hilt-android-compiler:2.38.1'


 }

最佳答案

我遇到了同样的问题,查看我的代码,我注意到我的 dagger-hilt 类路径项目位于 2.36,因此我更新到 2.38.1 并检查所有 hilt 依赖项是否具有相同的版本(否则错误会一次又一次地发生)您必须清除并重建项目。我希望这个解决方案适合您!

类路径插件:

classpath "com.google.dagger:hilt-android-gradle-plugin:2.38.1"

Dagger 柄:

kapt "com.google.dagger:hilt-android-compiler:2.38.1"
implementation "com.google.dagger:hilt-android:2.38.1"

Dagger 柄测试:

androidTestImplementation 'com.google.dagger:hilt-android-testing:2.38.1'
kaptAndroidTest 'com.google.dagger:hilt-android-compiler:2.38.1'

关于unit-testing - 找不到符号导入 dagger.hilt.android.internal.Contexts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68870751/

相关文章:

android - 无法使用 Hilt 创建 MainViewModel 的实例

android - 如何使用 Hilt 将 SharedPreferences 注入(inject)后台服务

unit-testing - 如何在 TFS 中使用起订量

api - GO单元测试结构化REST API项目

单元测试 grails 标签

android - 注入(inject)工作类时无法实例化工作人员

android - App_HiltComponents.ActivityC 范围为 @dagger.hilt.android.scopes.ActivityScoped 可能不会引用具有不同范围的绑定(bind)

android - MyAppHiltApp : java. lang.ClassNotFoundException:在路径上找不到类 "HiltApp":DexPathList

django - 使用灵活的 url 模式在 Django 中进行单元测试

unit-testing - 使用 jest 和 vue-test-utils2 在 vue3 typescript 单元测试中模拟 axios (已解决)