自定义应用程序类时无法启动junit测试

问题描述

当我尝试开始自己的junit测试之一时,由于多个错误,所有测试都失败了。这是由于这样的事实,我的Application class中包含一些变量,这些变量是在“正常”应用启动时初始化的,但是在我开始测试时却没有。注释掉变量可能有帮助,但这是一个丑陋的解决方案,在开始测试时总是注释掉东西。

应用程序类

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

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

private fun plantTimberTree() = Timber.plant(Timber.DebugTree())

private fun enableOfflinePersistence() {
    val settings = firestoreSettings { isPersistenceEnabled = true }
    Firebase.firestore.firestoreSettings = settings
}

TestCase

@RunWith(RobolectricTestRunner::class)
@Config(maxSdk = Build.VERSION_CODES.P,minSdk = Build.VERSION_CODES.P)
class EmailViewModelTest {


}

错误Stacktrace(无任何评论)

java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process null. Make sure to call FirebaseApp.initializeApp(Context) first.

    at com.google.firebase.FirebaseApp.getInstance(FirebaseApp.java:184)
    at com.google.firebase.firestore.FirebaseFirestore.getInstance(FirebaseFirestore.java:91)
    at com.google.firebase.firestore.ktx.FirestoreKt.getFirestore(Firestore.kt:32)
    at com.example.app.AppKt.enableOfflinePersistence(App.kt:44)
    at com.example.app.AppKt.access$enableOfflinePersistence(App.kt:1)
    at com.example.app.App.onCreate(App.kt:24)
    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)

错误Stacktrace(注释掉“ enableOfflicePersistence”时)

kotlin.UninitializedPropertyAccessException: lateinit property workerList has not been initialized

    at com.example.app.App.onCreate(App.kt:25)
    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)

有没有一种方法可以确定测试是否已经开始?我应该如何更改Application类以使测试再次运行?

感谢您的帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)