Kotlin:单元测试将函数作为参数的函数

Boh*_*sen 2 android unit-testing kotlin

我有一个从存储库中检索项目列表的函数.我没有使用常规回调,而是传入一个函数并使用结果调用它.但是你如何对这种功能进行单元测试呢?有没有办法验证传入的函数是否被调用,或者我应该重构和使用常规回调并使用模拟的回调接口测试它?

我的代码:

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()
    }
}
Run Code Online (Sandbox Code Playgroud)

Vin*_*rat 6

要检查它是否会被调用,类似的东西会起作用:

var hasBeenCalled = false
interactor.getWorklist({ result -> hasBeenCalled = true })

assertTrue(hasBeenCalled)
Run Code Online (Sandbox Code Playgroud)

当然你也可以检查预期结果是否通过等.


s1m*_*nw1 5

您可以简单地传递一个回调函数,该函数设置一个测试局部变量,您将其验证为断言。为简单起见,我对示例进行了一些更改:

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


@Test
fun testCase() {
    var invoked = false
    getWorklist {
        invoked = true
        it.length
    }
    Assert.assertTrue(invoked)
}
Run Code Online (Sandbox Code Playgroud)

  • 同样的想法,同样的时间。 (3认同)