2017-01-08 21 views
0

此單元測試未擊中Firebase服務器。如果使用斷點運行相同的單元測試,它將會碰到服務器。這讓我相信它可能與Firebase用於後臺工作的線程有關。未從Android單元測試中調用Firebase API

我試着在UI線程上運行代碼,但沒有改變。在獲取Firebase實例時,我也嘗試使用工具上下文。

爲什麼此代碼僅在使用斷點時才起作用?

@RunWith(AndroidJUnit4::class) 
class FirebaseTest : AndroidJUnitRunner() {  
    @Test 
    @Throws(Exception::class) 
    fun doTheTest() { 
     FirebaseDatabase.getInstance().reference.child("test").push() 
     assertTrue(true) 
    } 
} 

回答

0

push()本身並不做服務器上的任何東西,所以我不認爲你會看到過一個變化,如果你執行的所有是一行代碼。 push()只是生成一個鍵值(基於當前時間)並構造一個指向該鍵的DatabaseReference。什麼也沒寫,直到你寫的東西給DatabaseReference,就像這樣:

val ref = FirebaseDatabase.getInstance().reference.child("test").push() 
ref.setValue(...) 

這將異步寫你給在由推()生成的密鑰位置的值,你不能指望它會在測試結束時已完成交易,除非您在驗證完成往返之前阻止測試。

+0

它看起來像你的答案也與[這個問題](http://stackoverflow.com/questions/41535740/difference-between-firebase-instance-and-databasereference)有關。你能回答嗎?因爲我也很好奇。 :) – koceeng