Je crée une application Android qui utilise Firebase comme back-end et une architecture de modèle, de vue et de présentateur. Cependant, le fait que Firebase soit un service cloud complique les tests automatisés dans mon application Android. Jusqu'à présent, j'ai construit la plupart du système d'authentification, mais je ne peux pas voir comment implémenter des tests unitaires pour le code Firebase dans mon application. En termes de tests de bout en bout, je suis également bloqué.
Étant donné que les tests sont fondamentaux pour toute application Android et que sans elle, les développeurs d'applications ne peuvent pas être sûrs que ce qu'ils ont implémenté fonctionne comme prévu, je ne peux pas vraiment progresser davantage sans tests automatisés.
En conclusion, ma question est:
En général, comment implémentez-vous les tests automatisés Firebase dans une application Android?
MODIFIER:
Par exemple, quelqu'un pourrait-il tester la méthode suivante?
public void addUser(final String name, final String birthday,
final String email, final String password) {
Firebase mUsersNode = Constants.mRef.child("users");
final Firebase mSingleUser = mUsersNode.child(name);
mSingleUser.runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(MutableData mutableData) {
mSingleUser.child("birthday").setValue(birthday);
mSingleUser.child("email").setValue(email);
mSingleUser.child("password").setValue(password);
return Transaction.success(mutableData);
}
@Override
public void onComplete(FirebaseError firebaseError, boolean b, DataSnapshot dataSnapshot) {
if(firebaseError != null) {
mSignUpPresenter.addUserFail(firebaseError);
} else {
mSignUpPresenter.addUserComplete();
}
}
});
}
J'ai trouvé cela https://www.firebase.com/blog/2015-04-24-end-to-end-testing-firebase-server.html mais l'article a plus d'un an. Je l'ai seulement scanné, je vais lui donner une lecture plus approfondie dans un instant.
Quoi qu'il en soit, nous avons vraiment besoin de l'équivalent du backend Google AppEngine local que vous pouvez exécuter dans Intellij (Android Studio). Les tests ne peuvent pas être une réflexion après coup en 2016. En espérant vraiment que l'un des impressionnants développeurs de Firebase remarque ce fil et ses commentaires. Les tests devraient faire partie de leurs guides officiels.
Voici ma solution - j'espère que cela vous aidera:
[Mise à jour] J'ai supprimé ma précédente. échantillon en faveur de celui-ci. C'est plus simple et montre l'essence principale
public class TestFirebase extends AndroidTestCase {
private static Logger logger = LoggerFactory.getLogger(TestFirebase.class);
private CountDownLatch authSignal = null;
private FirebaseAuth auth;
@Override
public void setUp() throws InterruptedException {
authSignal = new CountDownLatch(1);
Firebase.setAndroidContext(mContext); //initializeFireBase(context);
auth = FirebaseAuth.getInstance();
if(auth.getCurrentUser() == null) {
auth.signInWithEmailAndPassword("[email protected]", "12345678").addOnCompleteListener(
new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull final Task<AuthResult> task) {
final AuthResult result = task.getResult();
final FirebaseUser user = result.getUser();
authSignal.countDown();
}
});
} else {
authSignal.countDown();
}
authSignal.await(10, TimeUnit.SECONDS);
}
@Override
public void tearDown() throws Exception {
super.tearDown();
if(auth != null) {
auth.signOut();
auth = null;
}
}
@Test
public void testWrite() throws InterruptedException {
final CountDownLatch writeSignal = new CountDownLatch(1);
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("message");
myRef.setValue("Do you have data? You'll love Firebase. - 3")
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull final Task<Void> task) {
writeSignal.countDown();
}
});
writeSignal.await(10, TimeUnit.SECONDS);
}
}