带有 AsyncTask 的浓缩咖啡

Posted

技术标签:

【中文标题】带有 AsyncTask 的浓缩咖啡【英文标题】:Espresso with AsyncTask 【发布时间】:2015-01-02 19:00:16 【问题描述】:

我正在尝试为我的登录活动编写一个测试,其中我正在使用 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;
    



【问题讨论】:

【参考方案1】:

好消息,AsyncTask 不需要任何自定义 IdlingResource:Espresso 在执行操作/断言之前已经等待所有任务运行。例如here。

【讨论】:

以上是关于带有 AsyncTask 的浓缩咖啡的主要内容,如果未能解决你的问题,请参考以下文章

浓缩咖啡执行点击

浓缩咖啡:AppNotIdleException

手机睡着的浓缩咖啡测试

未解决的浓缩咖啡方法

勺子和浓缩咖啡测试

浓缩咖啡 - withEffectiveVisibility vs isDisplayed