如何测试点击触发的AsyncTask?

时间:2014-02-11 04:14:23

标签: android android-asynctask onclick onclicklistener android-testing

如果按钮上的click事件触发了AsyncTask,我该如何测试它 - 我怎么能等到AsyncTask完成?

注意我总是可以直接在我的测试方法中执行AsyncTask,我知道如何测试这种情况。但是,如果我坚持使用onClick模拟performClick()事件,我仍然可以测试我的注册过程吗?

MainActivityFunctionalTest

public class MainActivityFunctionalTest extends
            ActivityInstrumentationTestCase2<MainActivity> {
    // ...
        public void testRegistration() {
        ImageButton submitBtn = (ImageButton) solo.getView(R.id.BtnR);
        assertNotNull(submitBtn);


        submitBtn.performClick();
                // How to do something when the registration is done?
        }
    // ...
    } 

MainActivity (待测项目)

ImageButton submitBtn = (ImageButton) findViewById(R.id.BtnRegister);
submitBtn.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                sendRegistration();
            }
        });

public void sendRegistration() {
        Processor processor = new Processor();// subclass of AsyncTask
        processor.execute();
    }

4 个答案:

答案 0 :(得分:3)

你可以这样做:

myAsyn obj = new myAsyn();
obj.execute();

while(obj.getStatus()==AsynTask.status.Finished)
{
//wait here
}

//when it finishes , this code will going to execute.

答案 1 :(得分:1)

你也可以使用get()方法等到任务完成。 http://developer.android.com/reference/android/os/AsyncTask.html#get%28%29

答案 2 :(得分:1)

使用Activity中的ActivityTestCase。按ID查找视图,只需将事件发送到您的视图即可。

有关runTestOnUiThread的更多信息:

private void buttonTest(Activity activity, int buttonId){
   Button button = (Button) activity.findViewById(buttonId);
    assertNotNull("Button not allowed to be null", button);
    button.performClick();
}

private void runButtonTest(Activity activity, int buttonId){
       getInstrumentation().runTestOnUiThread(new Runnable() {
            public void run() {
                buttonTest(activity,buttonId);
            }
     Object o = activity.mAsyncTask.get();
     assertNotNull(o);
}

或者,您可以等到Status的{​​{1}}更改为AsyncTask

答案 3 :(得分:0)

您可以使用可以执行操作的asynctask状态来查看更多详细信息,请查看以下链接

http://developer.android.com/reference/android/os/AsyncTask.Status.html