【发布时间】:2018-01-17 19:28:43
【问题描述】:
我的 Android 代码中有一个实用程序类,用于处理用户身份验证。我正在用 Mokcito 为这个类编写单元测试,以验证是否在新用户的创建成功或失败时通知侦听器。这是该实用程序类的方法之一:
public void createNewUser(String email, String password) {
firebaseAuth.createUserWithEmailAndPassword(email, password)
.addOnSuccessListener(authResult -> {
authListener.newUserCreated();
})
.addOnFailureListener(e -> {
authListener.failedCreatingNewUser();
});
}
我在嘲笑FirebaseAuth,我想验证authListener.newUserCreated() 是否已被调用。我曾尝试使用深度存根和参数捕获器来处理firebaseAuth.createUserWithEmailAndPassword 上的链式方法调用,但我不知道如何让它工作。
更新
这是我测试这个方法的测试类:
public class AuthUtilsTest {
private static final String USERNAME = "USERNAME";
private static final String PASSWORD = "PASSWORD";
@Mock
private FirebaseAuth firebaseAuth;
@Mock
private FirebaseFirestore firebaseFirestore;
@Mock
private BaseEncoding base64;
@Mock
private PreferencesRepo preferencesRepo;
@Mock
private AuthUtilsContract.EventListener eventListener;
private AuthUtils authUtils;
@Before
public void setupAuthUtils() {
MockitoAnnotations.initMocks(this);
authUtils = new AuthUtils(
preferencesRepo,
firebaseAuth,
firebaseFirestore,
base64
);
authUtils.takeEventListener(eventListener);
}
@Test
public void failureCreatingNewUserTellsListener() {
Task<AuthResult> failedTask = Tasks.forException(new Exception("fail"));
when(firebaseAuth.createUserWithEmailAndPassword(anyString(), anyString())).thenReturn(failedTask);
authUtils.createNewUser(USERNAME, PASSWORD);
verify(eventListener).failedCreatingNewUser();
}
}
抛出异常
java.lang.ExceptionInInitializerError 在 com.google.android.gms.tasks.zzn.addOnSuccessListener(未知来源) ...引起:java.lang.RuntimeException:方法getMainLooper在 android.os.Looper 没有被嘲笑。
【问题讨论】:
标签: android unit-testing mocking mockito firebase-authentication