Бросьте исключение, когда высмеиваете обратные вызовы kotlin lambda в Mockk - PullRequest
0 голосов
/ 17 декабря 2018

У меня возникают некоторые проблемы с имитацией функций обратного вызова с помощью Mockk.

Я пытаюсь смоделировать прослушиватель успешного выполнения задачи, который называется так:

collection
    .add(Item())
    .addOnSuccessListener {
        update(collection.document(it.id))
    }

Где подпись Java дляобратный вызов будет выглядеть так:

public interface OnSuccessListener<T> {
    void onSuccess(T var1);
}

и подпись для addOnSuccessListener выглядит следующим образом

public abstract Task<DocumentReference> addOnSuccessListener(@NonNull OnSuccessListener<DocumentReference> var1);

Мой макет выглядит так:

every { documentReferenceTask.addOnSuccessListener(any()) } answers {
    firstArg<(DocumentReference) -> Unit>().onSuccess(documentReference)
    value
}

У меня такжепробовал:

every { documentReferenceTask.addOnSuccessListener(any()) } answers {
    firstArg<OnSuccessListener<DocumentReference>>().invoke(documentReference)
    value
}

В любом случае, я получаю исключение типа:

java.lang.ClassCastException: com.package.MyClass$addProduct$1 cannot be cast to kotlin.jvm.functions.Function1

1 Ответ

0 голосов
/ 17 декабря 2018

Упс, я неправильно прочитал ошибку.

every { documentReferenceTask.addOnSuccessListener(any()) } answers {
    firstArg<OnSuccessListener<DocumentReference>>().invoke(documentReference)
    value
}

Этот метод работает, исключение приведения было из второй строки.Коррекция выглядит как

every { documentReferenceTask.addOnSuccessListener(any()) } answers {
    firstArg<OnSuccessListener<DocumentReference>>().invoke(documentReference)
    **documentReferenceTask**
}
...