макет анонимной функции в котлине - PullRequest
0 голосов
/ 15 октября 2019

Раньше у меня была такая функция, как

suspend fun loadSubmissionItems(submissionIds: List<String>): List<Submission> {
           return submissionIds.mapNotNull {
                submissionRepository.loadSubmissionBy(it)
            }
        }
    }

override fun onUpdatedItem(item: SubmissionItemRelation) {
        item.value?.let { list ->
            viewModelScope.launch {
                submissionItems.value = relationProxy.loadSubmissionItems(list)
            }
        }
    }

, и я тестировал / издевался вот так

relationProxy = mock {
            onBlocking { loadSubmissionItems(any()) }.thenReturn(mockedList)
        }

И это работает. Но я изменил код, как показано ниже:

 fun loadSubmissionItems(
        submissionIds: List<String>,
        onEnd: (List<Submission>) -> Unit
    ) {
        viewModelScope.launch {
            onEnd(submissionIds.mapNotNull {
                submissionRepository.loadSubmissionBy(it)
            })
        }

    }

 override fun onUpdatedItem(item: SubmissionItemRelation) {
        item.value?.let { list ->
            relationProxy.loadSubmissionItems(list) { result ->
                submissionItems.value = result
            }
        }
    }

Как я могу издеваться над анонимной функцией?

Я пробовал это, но у меня есть nullPointer для моего ожидаемого результата

val onEndMock = mock<(List<Submission>) -> Unit>()
        relationProxy = mock {
            on { loadSubmissionItems(any(), any()) }.then { onEndMock.invoke(listOf(fakeSubmission)) }
        }
...