0

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
4

1 に答える 1