Эспрессо с 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;
    }
}

}

person Drake    schedule 02.01.2015    source источник


Ответы (1)


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

person Gil Vegliach    schedule 17.08.2015