2015-01-02 11 views
10

Próbuję napisać test dla mojej aktywności SignIn, w której używam AsyncTask.Espresso z AsyncTask

public class SignInActivity extends Activity{ 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    ......... 

    new AsyncSignButton().execute(); 
} 

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

Do testowania Próbowałem, używając IdlingResource, ale nie rozumiem, w jaki sposób używać go z AsyncTask, nie z WebView jak w przykładach, tylko proste w AsyncTask.


Oto mój kod Test:

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; 
    } 
} 

} 

Odpowiedz

8

Dobra wiadomość, nie trzeba żadnych niestandardowych IdlingResource dla AsyncTask: Espresso już czeka na wszystkie zadania, które są uruchamiane przed wykonaniem czynności/twierdzeń. Jest to wspomniane na przykład here.