在单元测试中跳过Android类(WorkManager)

1l5u6lss  于 2023-03-28  发布在  Android
关注(0)|答案(1)|浏览(107)

我不能更改项目代码,我只能编写测试。我有一个用于测试的函数:

fun funToBeTested() {
    ClasWithWorkManager().veryVeryBadFunc(TAG)
// a lot of code to be tested below
...
}

与WorkManager:

class ClasWithWorkManager() {
    companion object {
        @JvmStatic
        fun veryVeryBadFunc(tag: String) {
            WorkManager.getInstance().cancelAllWorkByTag(tag)
            WorkManager.getInstance().pruneWork()
        }
    }
}

这个函数的其余部分没有Android类引用。我可以用Unit测试所有funToBeTested(),除了它的第一行吗?现在我有明显的 *WorkManager未正确初始化 * 问题

f0brbegy

f0brbegy1#

您需要使用以下代码设置WorkManager测试初始化帮助程序,以防止出现“WorkManager未正确初始化。问题”:

val mockedContext = getInstrumentation().targetContext
    val config = Configuration.Builder()
        .setMinimumLoggingLevel(Log.DEBUG)
        .setExecutor(SynchronousExecutor())
        .build()
    WorkManagerTestInitHelper.initializeTestWorkManager(mockedContext, config)

您需要添加以下依赖项(KotlinDSL)用于工作管理器单元测试:

testImplementation("androidx.work", "work-testing", "2.8.1")
testImplementation("org.robolectric", "robolectric", "4.9")
testImplementation("io.mockk", "mockk", "1.13.3")

OR(Groovy based syntax)

testImplementation "androidx.work:work-testing:2.8.1" 
testImplementation "org.robolectric:robolectric:4.9"
testImplementation "io.mockk:mockk:1.13.3"

相关问题