我正在尝试使用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.");
}
}
答案 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.");
}
}