我写了一种测试方法来测试这种方法:
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中收到该错误?有什么建议吗?