publicclassmymanagertestextendsactivitytestcase{
publicmymanagertest(stringname){
super(name);
}
protectedvoidsetup()throwsexception{
super.setup();
protectedvoidteardown()throwsexception{
super.teardown();
publicvoidtestdummytest(){
fail("failingtest");
大多數的manager集中執行http請求是要從背景擷取資料。例如,我們用下面的代碼來執行使用者的登入:
mloginmanager.performloginwithusername("username","password",newonloginlistener(){
@override
publicvoidonfailure(throwablethrowable){
fail();
override
publicvoidonsuccess(usercustomer){
//..
});
應用到我們自己的測試集合後,當得到預期之外的結果時,隻是讓這一結果失敗。我們可以看到為什麼在onfailure()函數中我們調用了fail()。接下來,即使我用一個錯誤的使用者名也能通過這個測試。思前想後,測試似乎是按照代碼順序執行的,但并沒有等到回調函數的結果傳回再向下執行。
這顯然不是一個好方法。因為現在的程式經常通過異步任務和回調方法從背景擷取資料。嘗試uithread測試仍然不行。
最後,我發現下面這種方法可以行得通。隻是用簡單的countdownlatch信号對象來實作wait-notify機制(你也可以用syncronized(lock){...lock.notify();},隻是這樣代碼并不美觀而已)
那麼之前的代碼就變成了下面的模樣:
finalcountdownlatchsignal=newcountdownlatch(1);
signal.countdown();
signal.await();
最新内容請見作者的github頁:http://qaseven.github.io/