2015-06-03 50 views
1

我有一個Activity,應該啓動AsyncTask,我想使用Robolectric 3.0測試此行爲。測試使用Robolectric啓動AsyncTask

到目前爲止,我這樣做是這樣,但我真的不喜歡它:

@Test 
public void testAsyncTaskIsStarted() { 
    activity = Robolectric.setupActivity(MyActivity.class); 
    Assert.assertTrue(ShadowApplication.getInstance().getBackgroundThreadScheduler().areAnyRunnable()); 
} 

有沒有更好的方式來做到這一點?

感謝您的幫助。

+0

至於我更好的測試將是運行這個後臺任務,並檢查發生的事 –

+0

是的,但單元測試的重點是單獨測試組件。這種方式我不依賴於任務行爲,特別是如果我的AsyncTask正在執行http請求或其他操作,我必須模擬。 –

+0

對不起,我不明白你對任務結果不感興趣,但只對一些抽象代碼會在另一個線程中運行感興趣。更明確的是它將在'AsyncTask'上運行。我會建議尋找另一種注射方式(匕首2是我的選擇) –

回答

0

我終於用Mockito嘲笑了我的AsyncTask。 在我Activity,我提取我的AsyncTask是爲了類字段能夠嘲笑它:

public void MyActivity extends Activity { 
    MyAsyncTask task; 

    public void onCreate (...) { 
     ... 
     if (task == null) 
      task = new MyAsyncTask(); 

     task.execute(...); 
     ... 
    } 

而且在我的測試:

MyAsyncTask asyncTaskMock = Mockito.mock(MyAsyncTask.class);  

@Test 
public void testAsyncTaskIsStarted() { 
    controller = Robolectric.buildActivity(MyActivity.class); 
    controller.get().task = asyncTaskMock; 
    controller.create().resume().visible(); 

    Mockito.verify(asyncTaskMock).execute(...); 
} 

希望這有助於。