使用Firebase进行unit testing

我正在构build一个使用Firebase作为后端以及模型,视图和演示者体系结构的Android应用程序。 但是,Firebase是一项云服务,这使我的android应用程序中的自动testing变得复杂。 到目前为止,我已经构build了大部分身份validation系统,但是无法看到如何在我的应用程序中为Firebase代码实现unit testing。 就端到端testing而言,我也被卡住了。

由于testing是任何Android应用程序的基础,没有它的应用程序开发人员不能确定他们已经实现了预期的function,我不能真正进步没有进一步的自动化testing。

最后,我的问题是:

一般来说,你如何在Android应用程序中实现Firebase自动化testing?

编辑:

作为一个例子可以有人unit testing下面的方法?

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(); } } }); } 

我发现这个https://www.firebase.com/blog/2015-04-24-end-to-end-testing-firebase-server.html,但文章已经超过一年了。 我只是对它进行扫描,我会稍微详细地阅读它。

无论哪种方式,我们确实需要相当于您可以在Intellij(Android Studio)中运行的本地Google AppEngine后端。 testing不可能是2016年的事后考虑。真的希望真棒Firebase开发者之一注意到这个线程和评论。 testing应该是他们的官方指南的一部分。

这是我的解决scheme – 希望这有助于:

[ 更新 ]我已经删除了我的上一页。 样本赞成这一个。 这更简单,显示了主要的本质

  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("urbi@orbi.it", "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); } }