我對android & java相當陌生。我試圖寫一個單元測試,驗證了火力地堡方法調用正確的參數&特定回調是在成功發射針對Firebase的UnitTest確保回調被觸發
public class RegistrationViewModel {
private iRegistrationViewCallback viewCallback;
private FirebaseAuth mAuth;
public String email;
public String password;
public RegistrationViewModel(iRegistrationViewCallback view, FirebaseAuth mockAuth) {
viewCallback = view;
mAuth = mockAuth;
}
public void createUser() {
mAuth.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener((Executor) this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
viewCallback.doSomething();
}
});
}
public void setEmail(String email) {
this.email = email;
}
public void setPassword(String password) {
this.password = password;
}
}
我的單元測試是這樣的:
public class RegistrationViewModelUnitTest {
private RegistrationViewModel viewModelUnderTest;
private iRegistrationViewCallback mockView;
private FirebaseAuth mockAuth;
@Before
public void SetUp() {
mockView = mock(iRegistrationViewCallback.class);
mockAuth = mock(FirebaseAuth.getInstance().getClass());
viewModelUnderTest = new RegistrationViewModel(mockView,mockAuth);
}
@Test
public void progressBarIsDismissedWhenRegistrationIsSuccessFul() throws Exception {
String email = "somusername";
String password = "somePassword";
viewModelUnderTest.email = email;
viewModelUnderTest.password = password;
viewModelUnderTest.createUser();
verify(mockAuth).createUserWithEmailAndPassword(email,password);
verify(mockView).doSomething();
}
}
verify(mockView).doSomething();
顯然失敗了。
什麼是驗證viewCallback.doSomething();
成功的最佳方法。我應該以某種方式存根onComplete
?還是有不同的方式來做到這一點?我曾想過將Firebase代碼放在界面後面,但仍然無法確定如何驗證回調被觸發。 我正在使用Mockito進行嘲弄。
你可以添加createUserWithEmailAndPassword方法的實現嗎? –
也是FirebaseAuth的單身人士嗎? –
據我所知,該代碼並非公開可用,這是firebase sdk的一部分。 https://developers.google.com/android/reference/com/google/firebase/auth/FirebaseAuth.html#createUserWithEmailAndPassword(java.lang.String,%20java.lang.String) –