2015-01-02 28 views
10

Bir AsyncTask kullandığım SignIn Etkinliğim için bir test yazmaya çalışıyorum. Test içinAsyncTask ile Espresso

public class SignInActivity extends Activity{ 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    ......... 

    new AsyncSignButton().execute(); 
} 

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

, ben IdlingResource kullanarak denedi, ama ben örneklerdeki gibi bir WebView'da, sadece basit bir AsyncTask ile, bir AsyncTask ile kullanmak nasıl anlamıyorum.

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

} 

cevap

8

İyi bir haberimiz AsyncTask için herhangi bir özel IdlingResource gerekmez:


İşte benim Testi kodudur tüm görevler eylemler/iddialarını yürütmeden önce yayınlanmış olma için Espresso zaten bekler. Bu örneğin here'dan bahsedilmektedir.