空参数列表?

时间:2019-05-06 13:25:48

标签: android firebase mockito rx-java rx-java2

我写了一种测试方法来测试这种方法:

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();

    }

因此,在测试中,我正在模拟并检查是否在成功和完成时返回了Task。

但是,当我运行测试时,出现此错误:

  

org.mockito.exceptions.base.MockitoException:没有参数值   抓到了!

从此行:testOnSuccessListener.getValue().onSuccess(voidTask);

进行一些调试,我可以看到testOnSuccessListener中的参数大小为0,而在testOnCompleteListener中为6(我在同一测试类中还有2个其他测试方法)。

我不知道为什么我在testOnSuccessListener中收到该错误?有什么建议吗?

0 个答案:

没有答案