如果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();
}发布于 2014-02-11 04:19:45
你可以:
myAsyn obj = new myAsyn();
obj.execute();
while(obj.getStatus()==AsynTask.status.Finished)
{
//wait here
}
//when it finishes , this code will going to execute.发布于 2014-02-11 04:38:44
还可以使用get()方法等待任务完成。http://developer.android.com/reference/android/os/AsyncTask.html#get%28%29
发布于 2014-02-11 05:06:52
使用您的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的AsyncTask更改为Status.Finished。
https://stackoverflow.com/questions/21692974
复制相似问题