2015-12-03 95 views
3

我正試圖對Android-DDP庫進行junit測試。對流星,Android-DDP庫的Junit測試

要初始化流星對象,我們需要一個對我能夠使用Robolectric實現的android上下文的引用。但是web-sockets可能正在與另一個線程上的服務器通話,因爲這些線程不會調用回調方法,並且測試方法正在結束。

我用netstat來檢查android客戶端是否正在嘗試通信。它顯示各種ping/pong消息。所以,是的,它試圖與服務器通話。

我也經歷了這個教程, Android AsyncTask testing with Android Test Framework。這個告訴如何在UI線程上處理網絡。但沒有什麼似乎是對的

的示例代碼,我曾是:

@Config(constants = BuildConfig.class, sdk = Build.VERSION_CODES.LOLLIPOP) 
@RunWith(RobolectricGradleTestRunner.class) 
public class MainActivityTest { 

    private MainActivity activity; 
    private Meteor meteor; 
    private String globalUrl = "ws://10.0.3.222:3000/websocket"; 

    @Before 
    public void setup() { 

     activity = Robolectric.setupActivity(MainActivity.class); 

     meteor = new Meteor(activity, globalUrl); 
     meteor.reconnect(); 

    /* 
     try { 
      Thread.sleep(2000); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    */ 

    } 

    @Test 
    public void validateMeteorIsConnected() { 

     assertTrue(meteor.isConnected()); 
    } 
} 

任何幫助將是明顯的。提前致謝。

+1

你已經談過你正在使用的圖書館,你還談到了你認爲是你的問題的原因。您還說過如何確保應用程序正在與服務器通話。但是你沒有提供任何有關你的實際測試的信息?另外,您還沒有分享您的代碼,因爲測試可能會導致錯誤。當他們甚至不知道你的流星應用正在做什麼時,你不能猜測你的問題是什麼?你的Android應用正在做什麼?另外如果他們沒有你的代碼的部分來仔細檢查,他們如何發現錯誤? – Ishan

+0

嘿,我正在進行圖書館及其方法的測試。 我已經用我的源代碼更新了這個問題。 我的Android應用程序對庫有簡單的實現,我必須爲Android DDP庫執行簡單的junit測試。 – cprakashagr

+0

嘗試使用MeteorSingleton而不是新的Meteor對象。 – Ishan

回答

0

您定義了兩種方法,setup()validateMeteorIsConnected(),但他們在哪裏調用?

首先,您的設置不正確。在您致電new Meteor(...)後,您不需要reconnect()調用,因爲構造函數已經建立連接。

而且,讓你知道什麼時候已經建立連接或數據的用武之地。這與mMeteor.setCallback(...);其中參數是thisactivity做你必須建立一個監聽器。

正如您所說,工作是在不同的線程上完成的,而且所有內容都是異步的。

因此,連接後不能立即撥打validateMeteorIsConnected()

您需要一些計時器,如鏈接到的問題所示。

+0

我明白'reconnect()'是不需要的。流星自己做。 當'mMeteor.setCallBack(this)',我必須重寫接口的方法。假設我在這些方法之前附加@Test符號,JUnit會在我編譯它們的那一刻調用它們。所以,當這些方法被回調時,測試運行可能會結束。像界面上的一些方法,如onDataAdded,不能保證它會被回調。 我嘗試了鏈接的延遲概念。但是,沒有成功的跡象。您能否給我推薦一個樣品。 – cprakashagr

+0

什麼沒有用?定時器/延遲概念的代碼是什麼?如果你調用構造函數'new Meteor(...)',一個連接將被建立。如果JUnit在幾秒鐘後調用你的'validateMeteorIsConnected()'方法,它應該真的是'true'。如果沒有,連接不能建立(或者只是花費太長時間)。 – caw

+0

我試了30秒延遲。 MeUnit在JUnit中可能比平時花費更多。如果我試圖通過應用程序而不是JUnit與流星建立連接,則很快會建立連接。 – cprakashagr