public void testMethod() throws InterruptedException {
//下行程式碼是AsyncTask
doAsyncTask();
//dothing
//dothing
}
private void doAsyncTask(){
//網路連接,等待回傳值
NetWork.connect(new Callback(){
@Override
public void success(){
}
public void fail(){
assertTrue(false);
}
});
}
test case在還沒有跑完doAsyncTask裡的callback就結束了
猜想是因為testcase在執行完本身的執行緒後,沒有碰到例外就當做測試成功
但這樣無法測試到需要多執行緒的程式碼,於是需要有一個等待機制的工具讓test case等待callback測試結束再往下繼續執行
java 有一個類叫做 CountDownLatch,主要用處是等待其他執行緒做完工作後,通知現在的執行緒繼續做尚未做完的工作
使用方法為new CountDownLatch(1),在建構子設定等待次數,await()方法是在子執行緒開始後呼叫,主執行緒會等待CountDownLatch倒數結束,等子執行緒做完動作呼叫countDown方法,主執行緒會從await繼續往下執行
套用在要測試的程式裡就會是
public void testMethod() throws InterruptedException {
CountDownLatch latch = new CountDownLatch(1);
//下行程式碼是AsyncTask
doAsyncTask();
//呼叫await後,程式會停在這一行等待倒數結束
latch.await();
//dothing
}
private void doAsyncTask(){
//網路連接,等待回傳值
NetWork.connect(new Callback(){
@Override
public void success(){
//當成功後,呼叫倒數加1,會通知latch檢查有沒有結束倒數
latch.countDown();
}
public void fail(){
assertTrue(false);
}
});
}
沒有留言:
張貼留言