如何编写Firebase Android Instrumentation测试?

时间:2016-03-15 15:00:04

标签: android firebase

我正在尝试使用Firebase作为我的应用的后端。如果我在我的应用程序中使用以下quickstart guide,一切正常。

如果我检查我的firebase数据页面,则表示数据已成功写入。

但是如果我尝试在androidTest(检测测试)中做同样的事情没有任何反应 - 没有数据写入firebase数据库。我已经在androidTest清单中指定了Internet权限,所以想知道我是否还需要做其他事情才能在我的测试中写入firebase?

在相关的说明中,一旦我可以在仪器测试中做到这一点,我有没有办法在单元测试中做同样的事情?

非常感谢,

Riz

编辑:这是我正在尝试运行的测试:

public class FirebaseTest extends InstrumentationTestCase{
    private static final String FIREBASE = "https://my-app-name.firebaseio.com/";

    @Override
    @Before
    public void setUp() {
        injectInstrumentation(InstrumentationRegistry.getInstrumentation());
        Firebase.setAndroidContext(getInstrumentation().getTargetContext());
    }

   @Test
   public void testWrite(){
       Firebase cloud = new Firebase(FIREBASE);
       cloud.child("message").setValue("Do you have data? You'll love Firebase.");
   }
}

1 个答案:

答案 0 :(得分:0)

在主应用程序中,您可以定义androidApplication类来初始化Firebase上下文。然后创建一个扩展ApplicationTestCase的ApplicationTest:

在主要来源:

public class MyApplication extends android.app.Application {

    @Override
    public void onCreate() {
       super.onCreate();
       Firebase.setAndroidContext(this); //initializeFireBase(context);
       isInitialized = true;
    }
}

在Android测试中:

public class ApplicationTest extends ApplicationTestCase<MyApplication> {

    private static MyApplication application;

    public ApplicationTest() {
        super(MyApplication.class);
    }

   @Override
   public void setUp() throws Exception {
      super.setUp();
      if (application == null) {
          application = getApplication();
      }
      if (application == null) {
         application = (MyApplication) getContext().getApplicationContext();
         assertNotNull(application);
         long start = System.currentTimeMillis();
         while (!application.isInitialized()){
             Thread.sleep(300);  //wait until FireBase is totally initialized
             if ( (System.currentTimeMillis() - start ) >= 1000 )
                 throw new TimeoutException(this.getClass().getName() +"Setup timeOut");
         }
      }
   }


   @Test
   public void testWrite(){
       Firebase cloud = new Firebase(FIREBASE);
       cloud.child("message").setValue("Do you have data? You'll love Firebase.");
   }

}