Kotlin:对接受函数作为参数的函数进行单元测试

7

我有一个从存储库检索项目列表的功能。我不使用常规回调函数,而是传递一个函数并使用结果调用该函数。但是如何对这种类型的函数进行单元测试呢?是否有一些方法可以验证传入的函数是否被调用,或者应该重构并使用常规回调函数,并使用模拟的回调接口进行测试?

我的代码:

class WorklistInteractor @Inject
constructor(private val worklistRepository: WorklistRepository,
            private val preferenceManager: PreferenceManager,
            private val executor: Executor)
    : WorklistDialogContract.Interactor, Executor by executor {

    @Volatile private var job: Job? = null

    override fun getWorklist(callback: (Result<List<WorklistItem>>) -> Unit) {
        job = onWorkerThread {
            val result = worklistRepository.getWorklist().awaitResult()
            onMainThread { callback(result) }
        }
    }

    override fun cancel() {
        job?.cancel()
    }
}
2个回答

9
要检查它是否被调用,可以使用以下类似的代码:
var hasBeenCalled = false
interactor.getWorklist({ result -> hasBeenCalled = true })

assertTrue(hasBeenCalled)

当然,您也可以检查是否传递了预期的结果等。

8

您可以简单地传递一个回调函数,该函数设置一个测试本地变量,然后将其作为断言进行验证。为了简单起见,我稍微修改了示例:

fun getWorklist(callback: (String) -> Unit) = callback("helloWorld")


@Test
fun testCase() {
    var invoked = false
    getWorklist {
        invoked = true
        it.length
    }
    Assert.assertTrue(invoked)
}

3
同样的想法,同一时间。 - Vincent Mimoun-Prat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接