Единичное тестирование с использованием Firebase
Я создаю приложение для Android, которое использует Firebase в качестве внутреннего и модельного, представления, архитектуры презентатора. Однако тот факт, что Firebase является облачным сервисом, усложняет автоматическое тестирование в моем приложении для Android. До сих пор я создал большую часть системы аутентификации, но не смог увидеть, как реализовать модульные тесты для кода Firebase в моем приложении. В терминах тестирования конца до конца я тоже застрял.
Поскольку тестирование является основополагающим для любого приложения для Android и без него, разработчики приложений не могут быть уверены, что они реализованы, как ожидается, я не могу продвинуться дальше без автоматических тестов.
В заключение мой вопрос:
Как правило, как реализовать автоматическое тестирование Firebase в приложении Android?
EDIT:
В качестве примера может быть кто-то unit test следующий метод?
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();
}
}
});
}
Ответы
Ответ 1
Я нашел этот https://www.firebase.com/blog/2015-04-24-end-to-end-testing-firebase-server.html, но статья старше года. Я только просмотрел его, я дам ему более подробное чтение немного.
В любом случае нам действительно нужен эквивалент локального бэкэнда Google AppEngine, который вы можете запустить в Intellij (Android Studio). Тестирование не может быть запоздалой мыслью в 2016 году. Действительно, надеясь, что один из удивительных разработчиков Firebase замечает эту тему и комментарии. Тестирование должно быть частью их официальных руководств.
Ответ 2
Вот мое решение - надеюсь, что это поможет:
[ Обновить]
Я удалил свой превью. образец в пользу этого. Это проще и показывает основную сущность.
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);
}
}