Testing async tasks with robolectric

bianca picture bianca · Feb 23, 2013 · Viewed 11.3k times · Source

Do you know how to implement unit testing for AsyncTasks using Robolectric ? Any pointers will be appreciated.

Answer

weston picture weston · Jan 21, 2015

Call execute(...) on the task, then to wait for the result call Robolectric.runBackgroundTasks()/Robolectric.flushBackgroundThreadScheduler() then you can assert.

@Test
public void test() {
    //create task
    MyAsyncTask asyncTask = new MyAsyncTask();

    //start task
    asyncTask.execute(...);

    //wait for task code
    // Robolectric.runBackgroundTasks(); (pre 3.0)
    Robolectric.flushBackgroundThreadScheduler(); //from 3.0

    //can run asserts on result now
    assert...(asyncTask.get());
}