2015-01-02 2 views
10

Я пытаюсь написать тест для своей активности входа в систему, в которой я использую AsyncTask.Эспрессо с AsyncTask

public class SignInActivity extends Activity{ 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    ......... 

    new AsyncSignButton().execute(); 
} 

class AsyncSignButton extends AsyncTask<Void, Void, Integer>{ 
    ....... 
} 

Для тестирования, я попытался с помощью IdlingResource, но я не понимаю, как бы использовать его с AsyncTask, а не с WebView, как в примерах, только простом AsyncTask.


Вот мой тест-код:

public class Test extends ActivityInstrumentationTestCase2<SplashActivity> { 

private SplashActivity mActivity; 

public Test(){ 
    super(SplashActivity.class); 
} 

public Test(Class<SplashActivity> activityClass) { 
    super(activityClass); 
} 

@Override 
protected void setUp() throws Exception{ 
    super.setUp(); 
    mActivity = getActivity(); 
    //how call it? 
} 

@LargeTest 
public void testList() throws InterruptedException { 

    //wait AsyncTask before call 
    onView(withId(R.id.action_bar_accept_button)).perform(click()); 

} 

public final class AsyncIdlingResource implements IdlingResource { 

    private AsyncTask asyncTask; 
    private ResourceCallback callback; 

    public AsyncIdlingResource(AsyncTask asyncTask){ 
     this.asyncTask = checkNotNull(asyncTask); 
    } 

    @Override 
    public String getName() { 
     return "Sign idling resource"; 
    } 

    @Override 
    public boolean isIdleNow() { 
     if(asyncTask == null) return true; 
     return asyncTask.getStatus() == AsyncTask.Status.FINISHED; 
    } 

    @Override 
    public void registerIdleTransitionCallback(ResourceCallback resourceCallback) { 
     this.callback = resourceCallback; 
    } 
} 

} 

ответ

8

Хорошие новости, вам не нужны никакие пользовательские IdlingResource для AsyncTask: Эспрессо уже ждет все задачи, которые выполнить перед выполнением действий/утверждения. Это упоминается, например, here.