首页 > 解决方案 > Android:Roboelectic 测试从 Application.onCreate 引发错误

问题描述

当尝试开始我的一项测试时,Robolectric 抛出一个错误,说我的自定义变量之一Application Class未初始化 ( kotlin.UninitializedPropertyAccessException: lateinit property workerList has not been initialized)。这可能是因为我的 lateinit 属性workerList稍后将使用 dagger-hilt 进行初始化。

应用类

@HiltAndroidApp
@InternalCoroutinesApi
class App : Application(), Configuration.Provider {
    @Inject lateinit var workerFactory: HiltWorkerFactory
    @Inject lateinit var workerList: WorkerList // this causes the problem
    override fun onCreate() {
        super.onCreate()
        plantTimberTree()
        workerList.startDownloadDocumentWork() // this causes the problem
    }

    override fun getWorkManagerConfiguration(): Configuration =
        Configuration.Builder().setWorkerFactory(workerFactory).build()
}

删除workerList.startDownloadDocumentWork()时,我所有的测试用例都会再次工作。如何在不删除的情况下解决问题workerList.startDownloadDocumentWork()

堆栈跟踪

kotlin.UninitializedPropertyAccessException: lateinit property workerList has not been initialized

    at com.example.app.App.onCreate(App.kt:21)
    at org.robolectric.android.internal.AndroidTestEnvironment.lambda$installAndCreateApplication$0(AndroidTestEnvironment.java:288)
    at org.robolectric.util.PerfStatsCollector.measure(PerfStatsCollector.java:75)
    at org.robolectric.android.internal.AndroidTestEnvironment.installAndCreateApplication(AndroidTestEnvironment.java:288)
    at org.robolectric.android.internal.AndroidTestEnvironment.setUpApplicationState(AndroidTestEnvironment.java:171)
    at org.robolectric.RobolectricTestRunner.beforeTest(RobolectricTestRunner.java:319)
    at org.robolectric.internal.SandboxTestRunner$2.lambda$evaluate$0(SandboxTestRunner.java:254)
    at org.robolectric.internal.bytecode.Sandbox.lambda$runOnMainThread$0(Sandbox.java:89)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

标签: androidunit-testingkotlinandroid-testingdagger-hilt

解决方案


推荐阅读