Пустой список аргументов? - PullRequest
0 голосов
/ 06 мая 2019

Я написал метод тестирования для проверки этого метода:

public static Completable updateUserProfile(FirebaseUser firebaseUser, UserProfileChangeRequest request){
        return Completable.create(emitter -> CompletableTask.assign(emitter, firebaseUser.updateProfile(request)));
    }

Метод CompletableTask.assign:

 public static <T> void assign(CompletableEmitter emitter, Task<T> task){
        CompletableTask completeTask = new CompletableTask(emitter);
        task.addOnCompleteListener(completeTask);
        task.addOnCompleteListener(completeTask);
        task.addOnFailureListener(completeTask);
    }

Вот метод тестирования:

@Mock
FirebaseUser firebaseUser;
@Mock
Task<Void> voidTask;
@Mock
UserProfileChangeRequest userProfileChangeRequest;

static <T> void setupTask(Task<T> task) {
    when(task.addOnCompleteListener(testOnCompleteListener.capture())).thenReturn(task);
    when(task.addOnSuccessListener(testOnSuccessListener.capture())).thenReturn(task);
    when(task.addOnFailureListener(testOnFailureListener.capture())).thenReturn(task);
} 


@Test
public void updateUserProfile() {

    ArgumentCaptor<OnCompleteListener> testOnCompleteListener = ArgumentCaptor.forClass(OnCompleteListener.class);
    ArgumentCaptor<OnSuccessListener> testOnSuccessListener = ArgumentCaptor.forClass(OnSuccessListener.class);
    ArgumentCaptor<OnFailureListener> testOnFailureListener = ArgumentCaptor.forClass(OnFailureListener.class);

    when(firebaseUser.updateProfile(userProfileChangeRequest)).thenReturn(voidTask);

    TestObserver<Void> testObserver = FirebaseUserWrapper.updateUserProfile(firebaseUser, userProfileChangeRequest)
                .test();

    testOnCompleteListener.getValue().onComplete(voidTask);
    testOnSuccessListener.getValue().onSuccess(voidTask);

    verify(firebaseUser).updateProfile(userProfileChangeRequest);

    testObserver.assertNoErrors()
                .assertComplete();

    }

Итак, в тесте я издеваюсь и проверяю, было ли задание возвращено в onsuccess и oncomplete.

Однако, когда я запускаю тест, я получаю эту ошибку:

org.mockito.exceptions.base.MockitoException: значение аргумента не было захватил!

из этой строки: testOnSuccessListener.getValue().onSuccess(voidTask);

Выполняя некоторую отладку, я вижу размер этого аргумента в 0 в testOnSuccessListener, а в testOnCompleteListener - 6 (у меня есть 2 других метода теста в том же классе теста).

Не могу понять, почему я получаю эту ошибку в testOnSuccessListener? Есть предложения?

...