使用Firebase进行单元测试

Tom*_*net 26 android integration-testing automated-tests unit-testing firebase

我正在构建一个Android应用程序,它使用Firebase作为后端和模型,视图,演示者架构.但是,Firebase是一项云服务这一事实使我的Android应用程序中的自动化测试变得复杂.到目前为止,我已经构建了大部分身份验证系统,但我无法看到如何在我的应用中为Firebase代码实现单元测试.在端到端测试方面,我也陷入困境.

由于测试是任何Android应用程序的基础,没有它应用程序开发人员无法确定他们已实现的功能是否按预期运行,如果没有自动化测试,我无法真正进一步发展.

总之,我的问题是:

通常,如何在Android应用程序中实现Firebase自动化测试?

编辑:

作为一个例子,有人可以单独测试以下方法吗?

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();
                }
            }
        });
    }
Run Code Online (Sandbox Code Playgroud)

Cre*_*eos 11

我发现了这个https://www.firebase.com/blog/2015-04-24-end-to-end-testing-firebase-server.html,但文章已有一年多了.我只扫描了它,我会稍微详细一读.

无论哪种方式,我们真的需要相当于您可以在Intellij(Android Studio)中运行的本地Google AppEngine后端.测试在2016年不能成为事后的想法.真的希望其中一个出色的Firebase开发者注意到这个帖子和评论.测试应该是他们官方指南的一部分.


Mik*_*rer 7

这是我的解决方案 - 希望这会有所帮助:

[ 更新 ]我删除了我的上一个.样本赞成这一个.它更简单,并显示了主要的本质

    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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

  • 但这会写入你的生产实例,不是吗?你打算连接哪个实体?即使您使用虚假用户登录,也不好对单个测试实例进行单元测试.....我们需要一个"本地"firebase服务器,就像google app引擎为单元测试提供本地版本一样 (8认同)